Improve selecting default contact and adds some NPE checks.

fix-message-formatting 5168
Damian Minkov 12 years ago
parent be91185e65
commit ff609e1ce3

@ -1111,6 +1111,15 @@ private Contact getDefaultContact(MetaContact metaContact)
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 @@ private ChatPanel createChat( MetaContact metaContact,
if (protocolContact == null)
protocolContact = getDefaultContact(metaContact);
if(protocolContact == null)
return null;
ChatContainer chatContainer = getChatContainer();
ChatPanel chatPanel = new ChatPanel(chatContainer);
@ -1456,6 +1468,9 @@ public void run()
{
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)

@ -10,6 +10,7 @@
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.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 @@ private void initSmsLabel(final JPanel centerPanel)
@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;

@ -167,7 +167,13 @@ public void contactClicked(ContactListEvent evt)
// do nothing
if(defaultContact == null)
return;
{
defaultContact = metaContact.getDefaultContact(
OperationSetSmsMessaging.class);
if(defaultContact == null)
return;
}
ProtocolProviderService defaultProvider
= defaultContact.getProtocolProvider();
@ -262,6 +268,17 @@ else if(mucDetails != null && mucDetails.size() > 0)
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);
}
}
}
}

@ -1903,6 +1903,17 @@ else if(mucDetails != null && mucDetails.size() > 0)
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);
}
}
}
}
}

@ -110,15 +110,20 @@ public ProtocolProviderService getProtocolProviderService()
{
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 String toString()
* 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 @@ private void initDetails(boolean isChatRoom)
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 @@ private void initDetails(boolean isChatRoom)
continue;
}
if(!isChatRoom
&& opsetCapabilities != null
&& !opsetCapabilities.containsKey(opset.getName()))
continue;
preferredProviders.put(opset, preferredProvider);
supportedOpSets.add(opset);

Loading…
Cancel
Save