aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/plugin/accountinfo
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/java/sip/communicator/plugin/accountinfo')
-rw-r--r--src/net/java/sip/communicator/plugin/accountinfo/AccountInfoActivator.java322
-rw-r--r--src/net/java/sip/communicator/plugin/accountinfo/AccountInfoPanel.java694
-rw-r--r--src/net/java/sip/communicator/plugin/accountinfo/Resources.java126
3 files changed, 571 insertions, 571 deletions
diff --git a/src/net/java/sip/communicator/plugin/accountinfo/AccountInfoActivator.java b/src/net/java/sip/communicator/plugin/accountinfo/AccountInfoActivator.java
index f2181cd..06b595e 100644
--- a/src/net/java/sip/communicator/plugin/accountinfo/AccountInfoActivator.java
+++ b/src/net/java/sip/communicator/plugin/accountinfo/AccountInfoActivator.java
@@ -1,4 +1,4 @@
-/*
+/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
@@ -15,163 +15,163 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package net.java.sip.communicator.plugin.accountinfo;
-
-import java.util.*;
-
-import net.java.sip.communicator.service.globaldisplaydetails.*;
-import net.java.sip.communicator.service.gui.*;
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.util.*;
-
-import org.jitsi.service.configuration.*;
-import org.osgi.framework.*;
-
-/**
- * Starts the account info bundle.
- *
- * @author Adam Glodstein
- * @author Marin Dzhigarov
- */
-public class AccountInfoActivator
- implements BundleActivator
-{
- private static final Logger logger =
- Logger.getLogger(AccountInfoActivator.class);
-
- /**
- * Property to disable account info in tools menu.
- */
- private static final String ACCOUNT_INFO_TOOLS_MENU_DISABLED_PROP =
- "net.java.sip.communicator.plugin.accountinfo" +
- ".ACCOUNT_INFO_TOOLS_MENU_DISABLED_PROP";
-
- /**
- * Property to disable account info in account config.
- */
- private static final String ACCOUNT_INFO_ACC_CONFIG_DISABLED_PROP =
- "net.java.sip.communicator.plugin.accountinfo" +
- ".ACCOUNT_INFO_ACC_CONFIG_DISABLED_PROP";
-
- /**
- * The OSGi bundle context.
- */
- public static BundleContext bundleContext;
-
- private static GlobalDisplayDetailsService globalDisplayDetailsService;
-
- public void start(BundleContext bc) throws Exception
- {
- AccountInfoActivator.bundleContext = bc;
-
- ConfigurationService config = ServiceUtils.getService(
- bundleContext, ConfigurationService.class);
-
- if(!config.getBoolean(ACCOUNT_INFO_TOOLS_MENU_DISABLED_PROP, false))
- {
- Hashtable<String, String> containerFilter
- = new Hashtable<String, String>();
- containerFilter.put(
- Container.CONTAINER_ID,
- Container.CONTAINER_TOOLS_MENU.getID());
-
- bundleContext.registerService(
- PluginComponentFactory.class.getName(),
- new PluginComponentFactory(Container.CONTAINER_TOOLS_MENU)
- {
- @Override
- protected PluginComponent getPluginInstance()
- {
- return new AccountInfoMenuItemComponent(
- getContainer(), this);
- }
- },
- containerFilter);
- }
-
- if(!config.getBoolean(ACCOUNT_INFO_ACC_CONFIG_DISABLED_PROP, false))
- {
- Hashtable<String, String> containerFilter
- = new Hashtable<String, String>();
- containerFilter.put(
- Container.CONTAINER_ID,
- Container.CONTAINER_ACCOUNT_RIGHT_BUTTON_MENU.getID());
-
- bundleContext.registerService(
- PluginComponentFactory.class.getName(),
- new PluginComponentFactory(
- Container.CONTAINER_ACCOUNT_RIGHT_BUTTON_MENU)
- {
- @Override
- protected PluginComponent getPluginInstance()
- {
- return new AccountInfoMenuItemComponent(
- getContainer(), this);
- }
- },
- containerFilter);
- }
- }
-
- public void stop(BundleContext bc) throws Exception {}
-
- /**
- * Returns all <tt>ProtocolProviderFactory</tt>s obtained from the bundle
- * context.
- *
- * @return all <tt>ProtocolProviderFactory</tt>s obtained from the bundle
- * context
- */
- public static Map<Object, ProtocolProviderFactory>
- getProtocolProviderFactories()
- {
- Map<Object, ProtocolProviderFactory> providerFactoriesMap =
- new Hashtable<Object, ProtocolProviderFactory>();
-
- ServiceReference[] serRefs = null;
- try
- {
- // get all registered provider factories
- serRefs =
- bundleContext.getServiceReferences(
- ProtocolProviderFactory.class.getName(), null);
-
- }
- catch (InvalidSyntaxException e)
- {
- logger.error("LoginManager : " + e);
- }
-
- for (int i = 0; i < serRefs.length; i++)
- {
-
- ProtocolProviderFactory providerFactory =
- (ProtocolProviderFactory) bundleContext.getService(serRefs[i]);
-
- providerFactoriesMap
- .put(serRefs[i].getProperty(ProtocolProviderFactory.PROTOCOL),
- providerFactory);
- }
-
- return providerFactoriesMap;
- }
-
- /**
- * Returns the <tt>GlobalDisplayDetailsService</tt> obtained from the bundle
- * context.
- *
- * @return the <tt>GlobalDisplayDetailsService</tt> obtained from the bundle
- * context
- */
- public static GlobalDisplayDetailsService getGlobalDisplayDetailsService()
- {
- if (globalDisplayDetailsService == null)
- {
- globalDisplayDetailsService
- = ServiceUtils.getService(
- bundleContext,
- GlobalDisplayDetailsService.class);
- }
- return globalDisplayDetailsService;
- }
-}
+package net.java.sip.communicator.plugin.accountinfo;
+
+import java.util.*;
+
+import net.java.sip.communicator.service.globaldisplaydetails.*;
+import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.protocol.*;
+import net.java.sip.communicator.util.*;
+
+import org.jitsi.service.configuration.*;
+import org.osgi.framework.*;
+
+/**
+ * Starts the account info bundle.
+ *
+ * @author Adam Glodstein
+ * @author Marin Dzhigarov
+ */
+public class AccountInfoActivator
+ implements BundleActivator
+{
+ private static final Logger logger =
+ Logger.getLogger(AccountInfoActivator.class);
+
+ /**
+ * Property to disable account info in tools menu.
+ */
+ private static final String ACCOUNT_INFO_TOOLS_MENU_DISABLED_PROP =
+ "net.java.sip.communicator.plugin.accountinfo" +
+ ".ACCOUNT_INFO_TOOLS_MENU_DISABLED_PROP";
+
+ /**
+ * Property to disable account info in account config.
+ */
+ private static final String ACCOUNT_INFO_ACC_CONFIG_DISABLED_PROP =
+ "net.java.sip.communicator.plugin.accountinfo" +
+ ".ACCOUNT_INFO_ACC_CONFIG_DISABLED_PROP";
+
+ /**
+ * The OSGi bundle context.
+ */
+ public static BundleContext bundleContext;
+
+ private static GlobalDisplayDetailsService globalDisplayDetailsService;
+
+ public void start(BundleContext bc) throws Exception
+ {
+ AccountInfoActivator.bundleContext = bc;
+
+ ConfigurationService config = ServiceUtils.getService(
+ bundleContext, ConfigurationService.class);
+
+ if(!config.getBoolean(ACCOUNT_INFO_TOOLS_MENU_DISABLED_PROP, false))
+ {
+ Hashtable<String, String> containerFilter
+ = new Hashtable<String, String>();
+ containerFilter.put(
+ Container.CONTAINER_ID,
+ Container.CONTAINER_TOOLS_MENU.getID());
+
+ bundleContext.registerService(
+ PluginComponentFactory.class.getName(),
+ new PluginComponentFactory(Container.CONTAINER_TOOLS_MENU)
+ {
+ @Override
+ protected PluginComponent getPluginInstance()
+ {
+ return new AccountInfoMenuItemComponent(
+ getContainer(), this);
+ }
+ },
+ containerFilter);
+ }
+
+ if(!config.getBoolean(ACCOUNT_INFO_ACC_CONFIG_DISABLED_PROP, false))
+ {
+ Hashtable<String, String> containerFilter
+ = new Hashtable<String, String>();
+ containerFilter.put(
+ Container.CONTAINER_ID,
+ Container.CONTAINER_ACCOUNT_RIGHT_BUTTON_MENU.getID());
+
+ bundleContext.registerService(
+ PluginComponentFactory.class.getName(),
+ new PluginComponentFactory(
+ Container.CONTAINER_ACCOUNT_RIGHT_BUTTON_MENU)
+ {
+ @Override
+ protected PluginComponent getPluginInstance()
+ {
+ return new AccountInfoMenuItemComponent(
+ getContainer(), this);
+ }
+ },
+ containerFilter);
+ }
+ }
+
+ public void stop(BundleContext bc) throws Exception {}
+
+ /**
+ * Returns all <tt>ProtocolProviderFactory</tt>s obtained from the bundle
+ * context.
+ *
+ * @return all <tt>ProtocolProviderFactory</tt>s obtained from the bundle
+ * context
+ */
+ public static Map<Object, ProtocolProviderFactory>
+ getProtocolProviderFactories()
+ {
+ Map<Object, ProtocolProviderFactory> providerFactoriesMap =
+ new Hashtable<Object, ProtocolProviderFactory>();
+
+ ServiceReference[] serRefs = null;
+ try
+ {
+ // get all registered provider factories
+ serRefs =
+ bundleContext.getServiceReferences(
+ ProtocolProviderFactory.class.getName(), null);
+
+ }
+ catch (InvalidSyntaxException e)
+ {
+ logger.error("LoginManager : " + e);
+ }
+
+ for (int i = 0; i < serRefs.length; i++)
+ {
+
+ ProtocolProviderFactory providerFactory =
+ (ProtocolProviderFactory) bundleContext.getService(serRefs[i]);
+
+ providerFactoriesMap
+ .put(serRefs[i].getProperty(ProtocolProviderFactory.PROTOCOL),
+ providerFactory);
+ }
+
+ return providerFactoriesMap;
+ }
+
+ /**
+ * Returns the <tt>GlobalDisplayDetailsService</tt> obtained from the bundle
+ * context.
+ *
+ * @return the <tt>GlobalDisplayDetailsService</tt> obtained from the bundle
+ * context
+ */
+ public static GlobalDisplayDetailsService getGlobalDisplayDetailsService()
+ {
+ if (globalDisplayDetailsService == null)
+ {
+ globalDisplayDetailsService
+ = ServiceUtils.getService(
+ bundleContext,
+ GlobalDisplayDetailsService.class);
+ }
+ return globalDisplayDetailsService;
+ }
+}
diff --git a/src/net/java/sip/communicator/plugin/accountinfo/AccountInfoPanel.java b/src/net/java/sip/communicator/plugin/accountinfo/AccountInfoPanel.java
index 075aa33..92f0b9a 100644
--- a/src/net/java/sip/communicator/plugin/accountinfo/AccountInfoPanel.java
+++ b/src/net/java/sip/communicator/plugin/accountinfo/AccountInfoPanel.java
@@ -1,4 +1,4 @@
-/*
+/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
@@ -15,349 +15,349 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package net.java.sip.communicator.plugin.accountinfo;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.util.*;
-
-import javax.swing.*;
-
-import net.java.sip.communicator.plugin.desktoputil.*;
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.service.protocol.event.*;
-import net.java.sip.communicator.plugin.accountinfo.AccountInfoMenuItemComponent.*;
-
-import org.osgi.framework.*;
-
-/**
- * A GUI plug-in for Jitsi that will allow users to set cross
- * protocol account information.
- *
- * @author Adam Goldstein
- * @author Marin Dzhigarov
- */
-public class AccountInfoPanel
- extends TransparentPanel
- implements ServiceListener,
- RegistrationStateChangeListener
-{
- /**
- * Serial version UID.
- */
- private static final long serialVersionUID = 0L;
-
- /**
- * The panel that contains the currently active <tt>AccountDetailsPanel</tt>
- */
- private final JPanel centerPanel =
- new TransparentPanel(new BorderLayout(10, 10));
-
- /**
- * The currently active <tt>AccountDetailsPanel</tt>
- */
- private AccountDetailsPanel currentDetailsPanel;
-
- /**
- * Combo box that is used for switching between accounts.
- */
- private final JComboBox accountsComboBox;
-
- /**
- * Instances of the <tt>AccountDetailsPanel</tt> are created for every
- * registered <tt>AccountID</tt>. All such pairs are stored in
- * this map.
- */
- private final Map<AccountID, AccountDetailsPanel>
- accountsTable =
- new HashMap<AccountID, AccountDetailsPanel>();
-
- /**
- * The parent dialog.
- */
- private AccountInfoDialog dialog;
-
- /**
- * Creates an instance of <tt>AccountInfoPanel</tt> that contains combo box
- * component with active user accounts and <tt>AccountDetailsPanel</tt> to
- * display and edit account information.
- */
- public AccountInfoPanel(AccountInfoDialog dialog)
- {
- this.dialog = dialog;
-
- setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
-
- accountsComboBox = new JComboBox();
- accountsComboBox.setOpaque(false);
- accountsComboBox.addItemListener(new ItemListener()
- {
- @Override
- public void itemStateChanged(ItemEvent e)
- {
- if (e.getStateChange() == ItemEvent.SELECTED)
- {
- AccountDetailsPanel panel =
- (AccountDetailsPanel) e.getItem();
- panel.setOpaque(false);
- centerPanel.removeAll();
- centerPanel.add(panel, BorderLayout.CENTER);
- centerPanel.revalidate();
- centerPanel.repaint();
- currentDetailsPanel = panel;
- }
- }
- });
-
- init();
-
- centerPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
-
- ComboBoxRenderer renderer = new ComboBoxRenderer();
- accountsComboBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
- accountsComboBox.setRenderer(renderer);
-
- JLabel comboLabel = new JLabel(
- Resources.getString(
- "plugin.accountinfo.SELECT_ACCOUNT"));
- comboLabel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-
- JPanel comboBoxPanel = new TransparentPanel();
- comboBoxPanel.setLayout(new BoxLayout(comboBoxPanel, BoxLayout.X_AXIS));
- comboBoxPanel.setBorder(
- BorderFactory.createEmptyBorder(10, 10, 10, 10));
-
- comboBoxPanel.add(comboLabel);
- comboBoxPanel.add(accountsComboBox);
-
- add(comboBoxPanel);
- add(centerPanel);
- }
-
- /**
- * Initialize.
- */
- private void init()
- {
- AccountInfoActivator.bundleContext.addServiceListener(this);
-
- for (ProtocolProviderFactory providerFactory : AccountInfoActivator
- .getProtocolProviderFactories().values())
- {
- ArrayList<AccountID> accountsList =
- providerFactory.getRegisteredAccounts();
-
- ServiceReference serRef;
- ProtocolProviderService protocolProvider;
-
- for (AccountID accountID : accountsList)
- {
- serRef = providerFactory.getProviderForAccount(accountID);
-
- protocolProvider = (ProtocolProviderService)AccountInfoActivator
- .bundleContext.getService(serRef);
-
- currentDetailsPanel = new AccountDetailsPanel(
- dialog,
- protocolProvider);
-
- accountsTable.put(
- protocolProvider.getAccountID(), currentDetailsPanel);
-
- accountsComboBox.addItem(currentDetailsPanel);
-
- protocolProvider.addRegistrationStateChangeListener(this);
- }
- }
- }
-
- /**
- * Clears all listeners.
- */
- public void dispose()
- {
- AccountInfoActivator.bundleContext.removeServiceListener(this);
-
- for(AccountDetailsPanel pan : accountsTable.values())
- {
- pan.getProtocolProvider()
- .removeRegistrationStateChangeListener(this);
- }
- }
-
- /**
- * A custom renderer to display properly <tt>AccountDetailsPanel</tt>
- * in a combo box.
- */
- private class ComboBoxRenderer extends DefaultListCellRenderer
- {
- /**
- * Serial version UID.
- */
- private static final long serialVersionUID = 0L;
-
- @Override
- public Component getListCellRendererComponent(
- JList list, Object value, int index,
- boolean isSelected, boolean hasFocus)
- {
- JLabel renderer
- = (JLabel) super.getListCellRendererComponent(
- list, value, index, isSelected, hasFocus);
-
- if (value != null)
- {
- AccountDetailsPanel panel = (AccountDetailsPanel) value;
-
- renderer.setText(
- panel.protocolProvider.getAccountID().getUserID());
- ImageIcon protocolIcon =
- new ImageIcon(panel.protocolProvider.getProtocolIcon().
- getIcon((ProtocolIcon.ICON_SIZE_16x16)));
- renderer.setIcon(protocolIcon);
- }
-
- return renderer;
- }
- }
-
- public void registrationStateChanged(final RegistrationStateChangeEvent evt)
- {
- if(!SwingUtilities.isEventDispatchThread())
- {
- SwingUtilities.invokeLater(new Runnable()
- {
- public void run()
- {
- registrationStateChanged(evt);
- }
- });
- return;
- }
-
- ProtocolProviderService protocolProvider = evt.getProvider();
-
- if (evt.getNewState() == RegistrationState.REGISTERED)
- {
- if (accountsTable.containsKey(protocolProvider.getAccountID()))
- {
- AccountDetailsPanel detailsPanel
- = accountsTable.get(protocolProvider.getAccountID());
- detailsPanel.loadDetails();
- }
- else
- {
- AccountDetailsPanel panel =
- new AccountDetailsPanel(dialog, protocolProvider);
- accountsTable.put(protocolProvider.getAccountID(), panel);
- accountsComboBox.addItem(panel);
- }
- }
- else if (evt.getNewState() == RegistrationState.UNREGISTERING)
- {
- AccountDetailsPanel panel
- = accountsTable.get(protocolProvider.getAccountID());
- if (panel != null)
- {
- accountsTable.remove(protocolProvider.getAccountID());
- accountsComboBox.removeItem(panel);
- if (currentDetailsPanel == panel)
- {
- currentDetailsPanel = null;
- centerPanel.removeAll();
- centerPanel.revalidate();
- centerPanel.repaint();
- }
- }
- }
- }
-
- /**
- * Handles registration and unregistration of
- * <tt>ProtocolProviderService</tt>
- *
- * @param event
- */
- @Override
- public void serviceChanged(final ServiceEvent event)
- {
- if(!SwingUtilities.isEventDispatchThread())
- {
- SwingUtilities.invokeLater(new Runnable()
- {
- public void run()
- {
- serviceChanged(event);
- }
- });
- return;
- }
-
- // Get the service from the event.
- Object service
- = AccountInfoActivator.bundleContext.getService(
- event.getServiceReference());
-
- // We are not interested in any services
- // other than ProtocolProviderService
- if (!(service instanceof ProtocolProviderService))
- return;
-
- ProtocolProviderService protocolProvider =
- (ProtocolProviderService) service;
-
- // If a new protocol provider is registered we to add new
- // AccountDetailsPanel to the combo box containing active accounts.
- if (event.getType() == ServiceEvent.REGISTERED)
- {
- if (accountsTable.get(protocolProvider.getAccountID()) == null)
- {
- AccountDetailsPanel panel =
- new AccountDetailsPanel(dialog, protocolProvider);
- accountsTable.put(protocolProvider.getAccountID(), panel);
- accountsComboBox.addItem(panel);
- protocolProvider.addRegistrationStateChangeListener(this);
- }
- }
- // If the protocol provider is being unregistered we have to remove
- // a AccountDetailsPanel from the combo box containing active accounts.
- else if (event.getType() == ServiceEvent.UNREGISTERING)
- {
- AccountDetailsPanel panel
- = accountsTable.get(protocolProvider.getAccountID());
- if (panel != null)
- {
- accountsTable.remove(protocolProvider.getAccountID());
- accountsComboBox.removeItem(panel);
- if (currentDetailsPanel == panel)
- {
- currentDetailsPanel = null;
- centerPanel.removeAll();
- centerPanel.revalidate();
- centerPanel.repaint();
- }
- }
- }
- }
-
- /**
- * Returns the combo box that switches between account detail panels.
- *
- * @return The combo box that switches between account detail panels.
- */
- public JComboBox getAccountsComboBox()
- {
- return accountsComboBox;
- }
-
- /**
- * Returns mapping between registered AccountIDs and their respective
- * AccountDetailsPanel that contains all the details for the account.
- *
- * @return mapping between registered AccountIDs and AccountDetailsPanel.
- */
- public Map<AccountID, AccountDetailsPanel> getAccountsTable()
- {
- return accountsTable;
- }
-}
+package net.java.sip.communicator.plugin.accountinfo;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+
+import javax.swing.*;
+
+import net.java.sip.communicator.plugin.desktoputil.*;
+import net.java.sip.communicator.service.protocol.*;
+import net.java.sip.communicator.service.protocol.event.*;
+import net.java.sip.communicator.plugin.accountinfo.AccountInfoMenuItemComponent.*;
+
+import org.osgi.framework.*;
+
+/**
+ * A GUI plug-in for Jitsi that will allow users to set cross
+ * protocol account information.
+ *
+ * @author Adam Goldstein
+ * @author Marin Dzhigarov
+ */
+public class AccountInfoPanel
+ extends TransparentPanel
+ implements ServiceListener,
+ RegistrationStateChangeListener
+{
+ /**
+ * Serial version UID.
+ */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * The panel that contains the currently active <tt>AccountDetailsPanel</tt>
+ */
+ private final JPanel centerPanel =
+ new TransparentPanel(new BorderLayout(10, 10));
+
+ /**
+ * The currently active <tt>AccountDetailsPanel</tt>
+ */
+ private AccountDetailsPanel currentDetailsPanel;
+
+ /**
+ * Combo box that is used for switching between accounts.
+ */
+ private final JComboBox accountsComboBox;
+
+ /**
+ * Instances of the <tt>AccountDetailsPanel</tt> are created for every
+ * registered <tt>AccountID</tt>. All such pairs are stored in
+ * this map.
+ */
+ private final Map<AccountID, AccountDetailsPanel>
+ accountsTable =
+ new HashMap<AccountID, AccountDetailsPanel>();
+
+ /**
+ * The parent dialog.
+ */
+ private AccountInfoDialog dialog;
+
+ /**
+ * Creates an instance of <tt>AccountInfoPanel</tt> that contains combo box
+ * component with active user accounts and <tt>AccountDetailsPanel</tt> to
+ * display and edit account information.
+ */
+ public AccountInfoPanel(AccountInfoDialog dialog)
+ {
+ this.dialog = dialog;
+
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+
+ accountsComboBox = new JComboBox();
+ accountsComboBox.setOpaque(false);
+ accountsComboBox.addItemListener(new ItemListener()
+ {
+ @Override
+ public void itemStateChanged(ItemEvent e)
+ {
+ if (e.getStateChange() == ItemEvent.SELECTED)
+ {
+ AccountDetailsPanel panel =
+ (AccountDetailsPanel) e.getItem();
+ panel.setOpaque(false);
+ centerPanel.removeAll();
+ centerPanel.add(panel, BorderLayout.CENTER);
+ centerPanel.revalidate();
+ centerPanel.repaint();
+ currentDetailsPanel = panel;
+ }
+ }
+ });
+
+ init();
+
+ centerPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+ ComboBoxRenderer renderer = new ComboBoxRenderer();
+ accountsComboBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+ accountsComboBox.setRenderer(renderer);
+
+ JLabel comboLabel = new JLabel(
+ Resources.getString(
+ "plugin.accountinfo.SELECT_ACCOUNT"));
+ comboLabel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+
+ JPanel comboBoxPanel = new TransparentPanel();
+ comboBoxPanel.setLayout(new BoxLayout(comboBoxPanel, BoxLayout.X_AXIS));
+ comboBoxPanel.setBorder(
+ BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+ comboBoxPanel.add(comboLabel);
+ comboBoxPanel.add(accountsComboBox);
+
+ add(comboBoxPanel);
+ add(centerPanel);
+ }
+
+ /**
+ * Initialize.
+ */
+ private void init()
+ {
+ AccountInfoActivator.bundleContext.addServiceListener(this);
+
+ for (ProtocolProviderFactory providerFactory : AccountInfoActivator
+ .getProtocolProviderFactories().values())
+ {
+ ArrayList<AccountID> accountsList =
+ providerFactory.getRegisteredAccounts();
+
+ ServiceReference serRef;
+ ProtocolProviderService protocolProvider;
+
+ for (AccountID accountID : accountsList)
+ {
+ serRef = providerFactory.getProviderForAccount(accountID);
+
+ protocolProvider = (ProtocolProviderService)AccountInfoActivator
+ .bundleContext.getService(serRef);
+
+ currentDetailsPanel = new AccountDetailsPanel(
+ dialog,
+ protocolProvider);
+
+ accountsTable.put(
+ protocolProvider.getAccountID(), currentDetailsPanel);
+
+ accountsComboBox.addItem(currentDetailsPanel);
+
+ protocolProvider.addRegistrationStateChangeListener(this);
+ }
+ }
+ }
+
+ /**
+ * Clears all listeners.
+ */
+ public void dispose()
+ {
+ AccountInfoActivator.bundleContext.removeServiceListener(this);
+
+ for(AccountDetailsPanel pan : accountsTable.values())
+ {
+ pan.getProtocolProvider()
+ .removeRegistrationStateChangeListener(this);
+ }
+ }
+
+ /**
+ * A custom renderer to display properly <tt>AccountDetailsPanel</tt>
+ * in a combo box.
+ */
+ private class ComboBoxRenderer extends DefaultListCellRenderer
+ {
+ /**
+ * Serial version UID.
+ */
+ private static final long serialVersionUID = 0L;
+
+ @Override
+ public Component getListCellRendererComponent(
+ JList list, Object value, int index,
+ boolean isSelected, boolean hasFocus)
+ {
+ JLabel renderer
+ = (JLabel) super.getListCellRendererComponent(
+ list, value, index, isSelected, hasFocus);
+
+ if (value != null)
+ {
+ AccountDetailsPanel panel = (AccountDetailsPanel) value;
+
+ renderer.setText(
+ panel.protocolProvider.getAccountID().getUserID());
+ ImageIcon protocolIcon =
+ new ImageIcon(panel.protocolProvider.getProtocolIcon().
+ getIcon((ProtocolIcon.ICON_SIZE_16x16)));
+ renderer.setIcon(protocolIcon);
+ }
+
+ return renderer;
+ }
+ }
+
+ public void registrationStateChanged(final RegistrationStateChangeEvent evt)
+ {
+ if(!SwingUtilities.isEventDispatchThread())
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ registrationStateChanged(evt);
+ }
+ });
+ return;
+ }
+
+ ProtocolProviderService protocolProvider = evt.getProvider();
+
+ if (evt.getNewState() == RegistrationState.REGISTERED)
+ {
+ if (accountsTable.containsKey(protocolProvider.getAccountID()))
+ {
+ AccountDetailsPanel detailsPanel
+ = accountsTable.get(protocolProvider.getAccountID());
+ detailsPanel.loadDetails();
+ }
+ else
+ {
+ AccountDetailsPanel panel =
+ new AccountDetailsPanel(dialog, protocolProvider);
+ accountsTable.put(protocolProvider.getAccountID(), panel);
+ accountsComboBox.addItem(panel);
+ }
+ }
+ else if (evt.getNewState() == RegistrationState.UNREGISTERING)
+ {
+ AccountDetailsPanel panel
+ = accountsTable.get(protocolProvider.getAccountID());
+ if (panel != null)
+ {
+ accountsTable.remove(protocolProvider.getAccountID());
+ accountsComboBox.removeItem(panel);
+ if (currentDetailsPanel == panel)
+ {
+ currentDetailsPanel = null;
+ centerPanel.removeAll();
+ centerPanel.revalidate();
+ centerPanel.repaint();
+ }
+ }
+ }
+ }
+
+ /**
+ * Handles registration and unregistration of
+ * <tt>ProtocolProviderService</tt>
+ *
+ * @param event
+ */
+ @Override
+ public void serviceChanged(final ServiceEvent event)
+ {
+ if(!SwingUtilities.isEventDispatchThread())
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ serviceChanged(event);
+ }
+ });
+ return;
+ }
+
+ // Get the service from the event.
+ Object service
+ = AccountInfoActivator.bundleContext.getService(
+ event.getServiceReference());
+
+ // We are not interested in any services
+ // other than ProtocolProviderService
+ if (!(service instanceof ProtocolProviderService))
+ return;
+
+ ProtocolProviderService protocolProvider =
+ (ProtocolProviderService) service;
+
+ // If a new protocol provider is registered we to add new
+ // AccountDetailsPanel to the combo box containing active accounts.
+ if (event.getType() == ServiceEvent.REGISTERED)
+ {
+ if (accountsTable.get(protocolProvider.getAccountID()) == null)
+ {
+ AccountDetailsPanel panel =
+ new AccountDetailsPanel(dialog, protocolProvider);
+ accountsTable.put(protocolProvider.getAccountID(), panel);
+ accountsComboBox.addItem(panel);
+ protocolProvider.addRegistrationStateChangeListener(this);
+ }
+ }
+ // If the protocol provider is being unregistered we have to remove
+ // a AccountDetailsPanel from the combo box containing active accounts.
+ else if (event.getType() == ServiceEvent.UNREGISTERING)
+ {
+ AccountDetailsPanel panel
+ = accountsTable.get(protocolProvider.getAccountID());
+ if (panel != null)
+ {
+ accountsTable.remove(protocolProvider.getAccountID());
+ accountsComboBox.removeItem(panel);
+ if (currentDetailsPanel == panel)
+ {
+ currentDetailsPanel = null;
+ centerPanel.removeAll();
+ centerPanel.revalidate();
+ centerPanel.repaint();
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the combo box that switches between account detail panels.
+ *
+ * @return The combo box that switches between account detail panels.
+ */
+ public JComboBox getAccountsComboBox()
+ {
+ return accountsComboBox;
+ }
+
+ /**
+ * Returns mapping between registered AccountIDs and their respective
+ * AccountDetailsPanel that contains all the details for the account.
+ *
+ * @return mapping between registered AccountIDs and AccountDetailsPanel.
+ */
+ public Map<AccountID, AccountDetailsPanel> getAccountsTable()
+ {
+ return accountsTable;
+ }
+}
diff --git a/src/net/java/sip/communicator/plugin/accountinfo/Resources.java b/src/net/java/sip/communicator/plugin/accountinfo/Resources.java
index 4557782..7c5987a 100644
--- a/src/net/java/sip/communicator/plugin/accountinfo/Resources.java
+++ b/src/net/java/sip/communicator/plugin/accountinfo/Resources.java
@@ -1,4 +1,4 @@
-/*
+/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
@@ -15,65 +15,65 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package net.java.sip.communicator.plugin.accountinfo;
-
-import javax.swing.*;
-
-import net.java.sip.communicator.service.resources.*;
-
-import org.jitsi.service.resources.*;
-
-/**
- * The <tt>Resources</tt> class manages the access to the internationalization
- * properties files and the image resources used in this plugin.
- *
- * @author Yana Stamcheva
- */
-public class Resources
-{
- private static ResourceManagementService resourcesService;
-
- /**
- * 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)
- {
- return getResources().getI18NString(key);
- }
-
- /**
- * Loads an image from a given image identifier.
- * @param imageID The identifier of the image.
- * @return The image for the given identifier.
- */
- public static ImageIcon getImage(String imageID)
- {
- return getResources().getImage(imageID);
- }
-
- /**
- * Loads an image from a given image identifier.
- * @param imageID The identifier of the image.
- * @return The image for the given identifier.
- */
- public static byte[] getImageInBytes(String imageID)
- {
- return getResources().getImageInBytes(imageID);
- }
-
- /**
- * Returns the <tt>ResourceManagementService</tt>.
- *
- * @return the <tt>ResourceManagementService</tt>.
- */
- public static ResourceManagementService getResources()
- {
- if (resourcesService == null)
- resourcesService =
- ResourceManagementServiceUtils
- .getService(AccountInfoActivator.bundleContext);
- return resourcesService;
- }
-}
+package net.java.sip.communicator.plugin.accountinfo;
+
+import javax.swing.*;
+
+import net.java.sip.communicator.service.resources.*;
+
+import org.jitsi.service.resources.*;
+
+/**
+ * The <tt>Resources</tt> class manages the access to the internationalization
+ * properties files and the image resources used in this plugin.
+ *
+ * @author Yana Stamcheva
+ */
+public class Resources
+{
+ private static ResourceManagementService resourcesService;
+
+ /**
+ * 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)
+ {
+ return getResources().getI18NString(key);
+ }
+
+ /**
+ * Loads an image from a given image identifier.
+ * @param imageID The identifier of the image.
+ * @return The image for the given identifier.
+ */
+ public static ImageIcon getImage(String imageID)
+ {
+ return getResources().getImage(imageID);
+ }
+
+ /**
+ * Loads an image from a given image identifier.
+ * @param imageID The identifier of the image.
+ * @return The image for the given identifier.
+ */
+ public static byte[] getImageInBytes(String imageID)
+ {
+ return getResources().getImageInBytes(imageID);
+ }
+
+ /**
+ * Returns the <tt>ResourceManagementService</tt>.
+ *
+ * @return the <tt>ResourceManagementService</tt>.
+ */
+ public static ResourceManagementService getResources()
+ {
+ if (resourcesService == null)
+ resourcesService =
+ ResourceManagementServiceUtils
+ .getService(AccountInfoActivator.bundleContext);
+ return resourcesService;
+ }
+}