diff options
author | Damian Minkov <damencho@jitsi.org> | 2014-03-31 16:53:37 +0300 |
---|---|---|
committer | Damian Minkov <damencho@jitsi.org> | 2014-03-31 16:53:37 +0300 |
commit | ff609e1ce3c93978ac11a9d65efd3e6df0b9197a (patch) | |
tree | 37cd8ff3db64a35130787981b44e6347e656f181 | |
parent | be91185e6591edc7c0b60accdce01106b98c66c9 (diff) | |
download | jitsi-ff609e1ce3c93978ac11a9d65efd3e6df0b9197a.zip jitsi-ff609e1ce3c93978ac11a9d65efd3e6df0b9197a.tar.gz jitsi-ff609e1ce3c93978ac11a9d65efd3e6df0b9197a.tar.bz2 |
Improve selecting default contact and adds some NPE checks.
5 files changed, 94 insertions, 6 deletions
diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java index d97710f..41790c8 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java @@ -1111,6 +1111,15 @@ public class ChatWindowManager Contact defaultContact = metaContact.getDefaultContact( OperationSetBasicInstantMessaging.class); + if(defaultContact == null) + { + defaultContact = metaContact.getDefaultContact( + OperationSetSmsMessaging.class); + + if(defaultContact == null) + return null; + } + ProtocolProviderService defaultProvider = defaultContact.getProtocolProvider(); @@ -1170,6 +1179,9 @@ public class ChatWindowManager if (protocolContact == null) protocolContact = getDefaultContact(metaContact); + if(protocolContact == null) + return null; + ChatContainer chatContainer = getChatContainer(); ChatPanel chatPanel = new ChatPanel(chatContainer); @@ -1456,6 +1468,9 @@ public class ChatWindowManager { ChatPanel chatPanel = getContactChat(metaContact, protocolContact); + if(chatPanel == null) + return; + // if not explicitly set, do not set it, leave it to default or // internally make the decision if(isSmsSelected != null) diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java index 08c88b1..9862e70 100755 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java @@ -10,6 +10,7 @@ import java.awt.Container; import java.awt.event.*; import java.io.*; import java.util.*; +import java.util.List; import javax.swing.*; import javax.swing.Timer; @@ -24,6 +25,8 @@ import net.java.sip.communicator.impl.gui.main.chat.conference.*; import net.java.sip.communicator.impl.gui.main.chat.menus.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.plugin.desktoputil.*; +import net.java.sip.communicator.service.contactlist.*; +import net.java.sip.communicator.service.contactsource.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.service.protocol.*; @@ -282,6 +285,31 @@ public class ChatWritePanel @Override public void actionPerformed(ActionEvent e) { + if(smsMode) + { + // check are we allowed to change back to im mode + Object descr = chatPanel.getChatSession().getDescriptor(); + + if(descr instanceof MetaContact) + { + List<Contact> imContact + = ((MetaContact)descr).getContactsForOperationSet( + OperationSetBasicInstantMessaging.class); + + if(imContact == null || imContact.size() == 0) + return; + } + else if(descr instanceof SourceContact) + { + List<ContactDetail> imContact + = ((SourceContact)descr).getContactDetails( + OperationSetBasicInstantMessaging.class); + + if(imContact == null || imContact.size() == 0) + return; + } + } + smsMode = smsButton.isSelected(); Color bgColor; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java index 26b73ea..6deddaf 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java @@ -167,7 +167,13 @@ public class ContactListPane // do nothing if(defaultContact == null) - return; + { + defaultContact = metaContact.getDefaultContact( + OperationSetSmsMessaging.class); + + if(defaultContact == null) + return; + } ProtocolProviderService defaultProvider = defaultContact.getProtocolProvider(); @@ -262,6 +268,17 @@ public class ContactListPane if(room != null) GuiActivator.getMUCService().openChatRoom(room); } + else + { + List<ContactDetail> smsDetails = contact.getContactDetails( + OperationSetSmsMessaging.class); + + if(smsDetails != null && smsDetails.size() > 0) + { + GuiActivator.getUIService().getChatWindowManager() + .startChat(contact.getContactAddress(), true); + } + } } } diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java index 29e8e70..8dfb866 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java @@ -1903,6 +1903,17 @@ public class TreeContactList if(room != null) GuiActivator.getMUCService().openChatRoom(room); } + else + { + List<ContactDetail> smsDetails = contact.getContactDetails( + OperationSetSmsMessaging.class); + + if(smsDetails != null && smsDetails.size() > 0) + { + GuiActivator.getUIService().getChatWindowManager() + .startChat(contact.getContactAddress(), true); + } + } } } } diff --git a/src/net/java/sip/communicator/impl/msghistory/MessageSourceContact.java b/src/net/java/sip/communicator/impl/msghistory/MessageSourceContact.java index bb661f3..e147344 100644 --- a/src/net/java/sip/communicator/impl/msghistory/MessageSourceContact.java +++ b/src/net/java/sip/communicator/impl/msghistory/MessageSourceContact.java @@ -110,15 +110,20 @@ public class MessageSourceContact { update(source); - if(source instanceof MessageDeliveredEvent - || source instanceof MessageReceivedEvent) + if(source instanceof MessageDeliveredEvent) + { + initDetails(false, + ((MessageDeliveredEvent)source).getDestinationContact()); + } + else if(source instanceof MessageReceivedEvent) { - initDetails(false); + initDetails(false, + ((MessageReceivedEvent)source).getSourceContact()); } else if(source instanceof ChatRoomMessageDeliveredEvent || source instanceof ChatRoomMessageReceivedEvent) { - initDetails(true); + initDetails(true, null); } this.service = service; @@ -277,7 +282,7 @@ public class MessageSourceContact * Will skip OperationSetBasicInstantMessaging for chat rooms. * @param isChatRoom is current source contact a chat room. */ - private void initDetails(boolean isChatRoom) + private void initDetails(boolean isChatRoom, Contact contact) { ContactDetail contactDetail = new ContactDetail( @@ -290,6 +295,13 @@ public class MessageSourceContact ProtocolProviderService preferredProvider = this.ppService; + OperationSetContactCapabilities capOpSet + = preferredProvider + .getOperationSet(OperationSetContactCapabilities.class); + Map<String, OperationSet> opsetCapabilities = null; + if(capOpSet != null) + opsetCapabilities = capOpSet.getSupportedOperationSets(contact); + if (preferredProvider != null) { preferredProviders @@ -312,6 +324,11 @@ public class MessageSourceContact continue; } + if(!isChatRoom + && opsetCapabilities != null + && !opsetCapabilities.containsKey(opset.getName())) + continue; + preferredProviders.put(opset, preferredProvider); supportedOpSets.add(opset); |