aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamian Minkov <damencho@jitsi.org>2014-03-31 16:53:37 +0300
committerDamian Minkov <damencho@jitsi.org>2014-03-31 16:53:37 +0300
commitff609e1ce3c93978ac11a9d65efd3e6df0b9197a (patch)
tree37cd8ff3db64a35130787981b44e6347e656f181
parentbe91185e6591edc7c0b60accdce01106b98c66c9 (diff)
downloadjitsi-ff609e1ce3c93978ac11a9d65efd3e6df0b9197a.zip
jitsi-ff609e1ce3c93978ac11a9d65efd3e6df0b9197a.tar.gz
jitsi-ff609e1ce3c93978ac11a9d65efd3e6df0b9197a.tar.bz2
Improve selecting default contact and adds some NPE checks.
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java15
-rwxr-xr-xsrc/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java28
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java19
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java11
-rw-r--r--src/net/java/sip/communicator/impl/msghistory/MessageSourceContact.java27
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);