diff options
author | Lyubomir Marinov <lyubomir.marinov@jitsi.org> | 2013-12-17 11:12:00 +0200 |
---|---|---|
committer | Lyubomir Marinov <lyubomir.marinov@jitsi.org> | 2013-12-17 11:12:00 +0200 |
commit | 5ddf3390602b828a128d62b53cbf03316305af3b (patch) | |
tree | 587daeee3e19ecfb94492904a1dcb6fdde5bd043 /src | |
parent | a2ac6e081c44681aeff8052e1a4ebcdacb8ff252 (diff) | |
download | jitsi-5ddf3390602b828a128d62b53cbf03316305af3b.zip jitsi-5ddf3390602b828a128d62b53cbf03316305af3b.tar.gz jitsi-5ddf3390602b828a128d62b53cbf03316305af3b.tar.bz2 |
Fixes an issue with missing or corrupt images which could cause the whole user interface of the application or parts of it to not appear at all.
Diffstat (limited to 'src')
8 files changed, 168 insertions, 122 deletions
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java index 3a2bf81..61fe737 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java @@ -471,19 +471,26 @@ public class MetaUIContact protocolContact = i.next(); // Set the first found status message. - if (statusMessage == null - && protocolContact.getStatusMessage() != null - && protocolContact.getStatusMessage().length() > 0) + if (statusMessage == null) + { statusMessage = protocolContact.getStatusMessage(); + if ((statusMessage != null) && (statusMessage.length() == 0)) + statusMessage = null; + } if(ConfigurationUtils.isHideAccountStatusSelectorsEnabled()) break; ImageIcon protocolStatusIcon - = ImageLoader.getIndexedProtocolIcon( - ImageUtils.getBytesInImage( - protocolContact.getPresenceStatus().getStatusIcon()), - protocolContact.getProtocolProvider()); + = getContactPresenceStatusIcon(protocolContact); + + if (protocolStatusIcon != null) + { + protocolStatusIcon + = ImageLoader.getIndexedProtocolIcon( + protocolStatusIcon.getImage(), + protocolContact.getProtocolProvider()); + } String contactAddress = protocolContact.getAddress(); //String statusMessage = protocolContact.getStatusMessage(); @@ -682,14 +689,13 @@ public class MetaUIContact { super( contact.getAddress(), contact.getDisplayName(), - new ImageIcon(contact.getPresenceStatus().getStatusIcon()), + getContactPresenceStatusIcon(contact), contact); this.contact = contact; ProtocolProviderService parentProvider = contact.getProtocolProvider(); - Iterator<Class<? extends OperationSet>> opSetClasses = parentProvider.getSupportedOperationSetClasses().iterator(); @@ -736,4 +742,11 @@ public class MetaUIContact { return MetaContactListSource.getContactCustomActionButtons(this); } + + private static ImageIcon getContactPresenceStatusIcon(Contact contact) + { + byte[] bytes = contact.getPresenceStatus().getStatusIcon(); + + return (bytes == null) ? null : new ImageIcon(bytes); + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/menus/AutoAnswerMenu.java b/src/net/java/sip/communicator/impl/gui/main/menus/AutoAnswerMenu.java index 6c5a935..edf08d1 100644 --- a/src/net/java/sip/communicator/impl/gui/main/menus/AutoAnswerMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/menus/AutoAnswerMenu.java @@ -409,20 +409,30 @@ public class AutoAnswerMenu * @return the image. */ private static Image getIconForProvider( - ProtocolProviderService providerService, Image customProviderImage, - ImageObserver imageObserver) + ProtocolProviderService providerService, + Image customProviderImage, + ImageObserver imageObserver) { - Image left = null; - if(isAutoAnswerEnabled(providerService)) - left = ImageLoader.getImage(ImageLoader.AUTO_ANSWER_CHECK); + Image left + = isAutoAnswerEnabled(providerService) + ? ImageLoader.getImage(ImageLoader.AUTO_ANSWER_CHECK) + : null; if(customProviderImage == null) - customProviderImage = ImageUtils.getBytesInImage( - providerService.getProtocolIcon().getIcon( - ProtocolIcon.ICON_SIZE_16x16)); + { + byte[] bytes + = providerService.getProtocolIcon().getIcon( + ProtocolIcon.ICON_SIZE_16x16); + + if (bytes != null) + customProviderImage = ImageUtils.getBytesInImage(bytes); + } - return ImageUtils.getComposedImage( - left, customProviderImage, imageObserver); + return + ImageUtils.getComposedImage( + left, + customProviderImage, + imageObserver); } /** @@ -526,7 +536,10 @@ public class AutoAnswerMenu Image onlineImage, SIPCommMenu parentMenu) { - super(displayName, new ImageIcon(onlineImage)); + super( + displayName, + (onlineImage == null) ? null : new ImageIcon(onlineImage)); + this.providerService = provider; this.parentMenu = parentMenu; diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/PresenceStatusMenu.java b/src/net/java/sip/communicator/impl/gui/main/presence/PresenceStatusMenu.java index b10e7f7..305b184 100644 --- a/src/net/java/sip/communicator/impl/gui/main/presence/PresenceStatusMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/presence/PresenceStatusMenu.java @@ -106,10 +106,11 @@ public class PresenceStatusMenu while (statusIterator.hasNext()) { PresenceStatus status = statusIterator.next(); + byte[] statusIcon = status.getStatusIcon(); - this.addItem( + addItem( status.getStatusName(), - new ImageIcon(status.getStatusIcon()), + (statusIcon == null) ? null : new ImageIcon(statusIcon), this); } @@ -133,12 +134,13 @@ public class PresenceStatusMenu public void addItem(String text, Icon icon, ActionListener actionListener) { JCheckBoxMenuItem item = new JCheckBoxMenuItem(text, icon); + item.setName(text); group.add(item); item.addActionListener(actionListener); - this.add(item); + add(item); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/SimpleStatusMenu.java b/src/net/java/sip/communicator/impl/gui/main/presence/SimpleStatusMenu.java index de7051e..b6aaf60 100644 --- a/src/net/java/sip/communicator/impl/gui/main/presence/SimpleStatusMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/presence/SimpleStatusMenu.java @@ -46,11 +46,12 @@ public class SimpleStatusMenu */ public SimpleStatusMenu(ProtocolProviderService protocolProvider) { - this(protocolProvider, - protocolProvider.getAccountID().getDisplayName(), - ImageUtils.getBytesInImage( - protocolProvider.getProtocolIcon().getIcon( - ProtocolIcon.ICON_SIZE_16x16))); + this( + protocolProvider, + protocolProvider.getAccountID().getDisplayName(), + getProtocolImage( + protocolProvider, + ProtocolIcon.ICON_SIZE_16x16)); } /** @@ -64,27 +65,34 @@ public class SimpleStatusMenu String displayName, Image onlineImage) { - super(displayName, new ImageIcon(onlineImage), protocolProvider); + super( + displayName, + (onlineImage == null) ? null : new ImageIcon(onlineImage), + protocolProvider); - this.setToolTipText("<html><b>" + displayName - + "</b><br>Offline</html>"); + setToolTipText("<html><b>" + displayName + "</b><br>Offline</html>"); JLabel titleLabel = new JLabel(displayName); titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD)); - this.add(titleLabel); - this.addSeparator(); + add(titleLabel); + addSeparator(); onlineItem = createMenuItem( "service.gui.ONLINE", getIcon(), GlobalStatusEnum.ONLINE_STATUS); - offlineItem = createMenuItem( - "service.gui.OFFLINE", - new ImageIcon(LightGrayFilter.createDisabledImage(onlineImage)), - GlobalStatusEnum.OFFLINE_STATUS); + offlineItem + = createMenuItem( + "service.gui.OFFLINE", + (onlineImage == null) + ? null + : new ImageIcon( + LightGrayFilter.createDisabledImage( + onlineImage)), + GlobalStatusEnum.OFFLINE_STATUS); group.add(onlineItem); group.add(offlineItem); @@ -96,16 +104,18 @@ public class SimpleStatusMenu } private JCheckBoxMenuItem createMenuItem( - String textKey, Icon icon, String name) + String textKey, + Icon icon, + String name) { - JCheckBoxMenuItem menuItem = - new JCheckBoxMenuItem( - GuiActivator.getResources().getI18NString(textKey), - icon); + JCheckBoxMenuItem menuItem + = new JCheckBoxMenuItem( + GuiActivator.getResources().getI18NString(textKey), + icon); menuItem.setName(name); menuItem.addActionListener(this); - this.add(menuItem); + add(menuItem); return menuItem; } @@ -161,18 +171,29 @@ public class SimpleStatusMenu public void loadSkin() { super.loadSkin(); - setIcon(new ImageIcon(ImageUtils.getBytesInImage( - protocolProvider.getProtocolIcon().getIcon( - ProtocolIcon.ICON_SIZE_16x16)))); - if(onlineItem != null) + Image image + = getProtocolImage(protocolProvider, ProtocolIcon.ICON_SIZE_16x16); + + if (image != null) + setIcon(new ImageIcon(image)); + + if (onlineItem != null) onlineItem.setIcon(getIcon()); - if(offlineItem != null) + if ((offlineItem != null) && (image != null)) + { offlineItem.setIcon( - new ImageIcon(LightGrayFilter.createDisabledImage( - ImageUtils.getBytesInImage( - protocolProvider.getProtocolIcon().getIcon( - ProtocolIcon.ICON_SIZE_16x16))))); + new ImageIcon(LightGrayFilter.createDisabledImage(image))); + } + } + + private static Image getProtocolImage( + ProtocolProviderService pps, + String iconSize) + { + byte[] bytes = pps.getProtocolIcon().getIcon(iconSize); + + return (bytes == null) ? null : ImageUtils.getBytesInImage(bytes); } } diff --git a/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java b/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java index ac82d7f..664d9ae 100644 --- a/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java +++ b/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java @@ -1535,16 +1535,13 @@ public class ImageLoader */ public static ImageIcon getAccountStatusImage(ProtocolProviderService pps) { - ImageIcon statusIcon; - OperationSetPresence presence = pps.getOperationSet(OperationSetPresence.class); - + byte[] protocolStatusIcon + = (presence == null) + ? null + : presence.getPresenceStatus().getStatusIcon(); Image statusImage; - byte[] protocolStatusIcon = null; - - if(presence != null) - protocolStatusIcon = presence.getPresenceStatus().getStatusIcon(); if (presence != null && protocolStatusIcon != null) { @@ -1552,21 +1549,22 @@ public class ImageLoader } else { - statusImage - = ImageUtils.getBytesInImage(pps.getProtocolIcon().getIcon( - ProtocolIcon.ICON_SIZE_16x16)); + byte[] bytes + = pps.getProtocolIcon().getIcon(ProtocolIcon.ICON_SIZE_16x16); - if (!pps.isRegistered()) + statusImage + = (bytes == null) ? null : ImageUtils.getBytesInImage(bytes); + if (!pps.isRegistered() && (statusImage != null)) { statusImage = LightGrayFilter.createDisabledImage(statusImage); } } - statusIcon = new ImageIcon( - getIndexedProtocolImage(statusImage, pps)); - - return statusIcon; + return + (statusImage == null) + ? null + : new ImageIcon(getIndexedProtocolImage(statusImage, pps)); } /** diff --git a/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java b/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java index b232f5d..0e3625f 100644 --- a/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java +++ b/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java @@ -177,49 +177,50 @@ public class StatusSelector public void updateStatus(PresenceStatus presenceStatus) { + String presenceStatusName = presenceStatus.getStatusName(); + if (logger.isTraceEnabled()) - logger.trace("Systray update status for provider: " - + provider.getAccountID().getAccountAddress() - + ". The new status will be: " + presenceStatus.getStatusName()); + { + logger.trace( + "Systray update status for provider: " + + provider.getAccountID().getAccountAddress() + + ". The new status will be: " + + presenceStatusName); + } if (menu instanceof AbstractButton) - ((AbstractButton) menu).setIcon(new ImageIcon(presenceStatus - .getStatusIcon())); + { + byte[] bytes = presenceStatus.getStatusIcon(); + + if (bytes != null) + ((AbstractButton) menu).setIcon(new ImageIcon()); + } if(menu instanceof Menu) { Menu theMenu = (Menu) menu; - for(int i =0; i < theMenu.getItemCount(); i++) + + for(int i = 0, count = theMenu.getItemCount(); i < count; i++) { MenuItem item = theMenu.getItem(i); if(item instanceof CheckboxMenuItem) { - if(item.getLabel().equals(presenceStatus.getStatusName())) - { - ((CheckboxMenuItem)item).setState(true); - } - else - { - ((CheckboxMenuItem)item).setState(false); - } + ((CheckboxMenuItem) item).setState( + item.getLabel().equals(presenceStatusName)); } } } else if(menu instanceof JMenu) { JMenu theMenu = (JMenu) menu; - for(int i =0; i < theMenu.getItemCount(); i++) + + for(int i = 0, count = theMenu.getItemCount(); i < count; i++) { JMenuItem item = theMenu.getItem(i); if(item instanceof JCheckBoxMenuItem) - { - if(item.getText().equals(presenceStatus.getStatusName())) - item.setSelected(true); - else - item.setSelected(false); - } + item.setSelected(item.getText().equals(presenceStatusName)); } } } diff --git a/src/net/java/sip/communicator/plugin/desktoputil/ExtendedTooltip.java b/src/net/java/sip/communicator/plugin/desktoputil/ExtendedTooltip.java index 47fb4aa..f1fbaab 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/ExtendedTooltip.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/ExtendedTooltip.java @@ -146,12 +146,9 @@ public class ExtendedTooltip * @param icon the icon to show * @param text the name to show */ - public void addLine(Icon icon, - String text) + public void addLine(Icon icon, String text) { - JLabel lineLabel = new JLabel( text, - icon, - JLabel.LEFT); + JLabel lineLabel = new JLabel(text, icon, JLabel.LEFT); linesPanel.add(lineLabel); diff --git a/src/net/java/sip/communicator/plugin/desktoputil/ImageUtils.java b/src/net/java/sip/communicator/plugin/desktoputil/ImageUtils.java index d84f278..513ef32 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/ImageUtils.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/ImageUtils.java @@ -503,9 +503,7 @@ public class ImageUtils Image image = null; try { - image = ImageIO.read( - new ByteArrayInputStream(imageBytes)); - + image = ImageIO.read(new ByteArrayInputStream(imageBytes)); } catch (Exception e) { @@ -523,48 +521,51 @@ public class ImageUtils * @return the composed image. */ public static Image getComposedImage( - Image leftImage, Image rightImage, - ImageObserver imageObserver) + Image leftImage, Image rightImage, + ImageObserver imageObserver) { - int height = 0; - if(leftImage == null && rightImage == null) - return null; - if(leftImage != null && rightImage != null) - height = Math.max(leftImage.getHeight(imageObserver), - rightImage.getHeight(imageObserver)); - else if(leftImage == null) - height = rightImage.getHeight(imageObserver); - else - height = leftImage.getHeight(imageObserver); + int height; + int leftWidth; + int width; - int width = 0; - int leftWidth = 0; - if(leftImage != null && rightImage != null) + if (leftImage == null) { - leftWidth = leftImage.getWidth(imageObserver); - width = leftWidth + - rightImage.getWidth(imageObserver); + if (rightImage == null) + { + return null; + } + else + { + height = rightImage.getHeight(imageObserver); + leftWidth = rightImage.getWidth(imageObserver); + width = leftWidth * 2; + } } - else if(leftImage == null) + else if (rightImage == null) { - leftWidth = rightImage.getWidth(imageObserver); - width = leftWidth*2; + height = leftImage.getHeight(imageObserver); + leftWidth = leftImage.getWidth(imageObserver); + width = leftWidth * 2; } else { + height + = Math.max( + leftImage.getHeight(imageObserver), + rightImage.getHeight(imageObserver)); leftWidth = leftImage.getWidth(imageObserver); - width = leftWidth*2; + width = leftWidth + rightImage.getWidth(imageObserver); } - BufferedImage buffImage = - new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + BufferedImage buffImage + = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) buffImage.getGraphics(); AntialiasingManager.activateAntialiasing(g); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); - if(leftImage != null) + if (leftImage != null) g.drawImage(leftImage, 0, 0, null); - if(rightImage != null) + if (rightImage != null) g.drawImage(rightImage, leftWidth + 1, 0, null); return buffImage; |