Adds open automatically configuration option to the chat room right hand menu.

cusax-fix 5038
hristoterezov 12 years ago
parent 2d240eb9ac
commit 3aab81fb7a

@ -401,6 +401,10 @@ service.gui.OPEN_FILE_FROM_IMAGE=Double click to open file.
service.gui.OPEN_FOLDER=Open folder service.gui.OPEN_FOLDER=Open folder
service.gui.OPEN_IN_BROWSER=Open in &browser service.gui.OPEN_IN_BROWSER=Open in &browser
service.gui.OPTIONS=Options service.gui.OPTIONS=Options
service.gui.OPEN_AUTOMATICALLY=Open this room automatically when
service.gui.OPEN_ON_ACTIVITY=Open on activity
service.gui.OPEN_ON_MESSAGE=Open on message only
service.gui.OPEN_ON_IMPORTANT_MESSAGE=Open on important messages only
service.gui.OR=or service.gui.OR=or
service.gui.OR_ENTER_PHONE_NUMBER=Or enter phone number here... service.gui.OR_ENTER_PHONE_NUMBER=Or enter phone number here...
service.gui.ORGANIZATION=Organization service.gui.ORGANIZATION=Organization

@ -1607,4 +1607,16 @@ public void showAddChatRoomDialog()
{ {
ChatRoomTableDialog.showChatRoomTableDialog(); ChatRoomTableDialog.showChatRoomTableDialog();
} }
/**
* Shows chat room open automatically configuration dialog.
* @param chatRoomId the chat room id of the chat room associated with the
* dialog
* @param pps the protocol provider service of the chat room
*/
public void showChatRoomAutoOpenConfigDialog(
ProtocolProviderService pps, String chatRoomId)
{
new ChatRoomAutoOpenConfigDialog(pps, chatRoomId);
}
} }

@ -0,0 +1,256 @@
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.gui.main.chat.conference;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.msghistory.*;
import net.java.sip.communicator.service.muc.*;
import net.java.sip.communicator.service.protocol.*;
/**
* A dialog for the chat room automatically open configuration.
*
* @author Hristo Terezov
*/
public class ChatRoomAutoOpenConfigDialog
extends SIPCommDialog
implements ActionListener
{
/**
* The serial version ID.
*/
private static final long serialVersionUID = -7741709128413173168L;
/**
* The current value.
*/
private String value = null;
/**
* The protocol provider service associated with the chat room.
*/
private ProtocolProviderService pps;
/**
* The chat room id of the chat room.
*/
private String chatRoomId;
/**
* Open on activity radio button.
*/
private final JRadioButton openOnActivity
= new JRadioButton(
GuiActivator.getResources()
.getI18NString("service.gui.OPEN_ON_ACTIVITY"));
/**
* Open on message radio button.
*/
private final JRadioButton openOnMessage
= new JRadioButton(
GuiActivator.getResources()
.getI18NString("service.gui.OPEN_ON_MESSAGE"));
/**
* Open on important message radio button.
*/
private final JRadioButton openOnImportantMessage
= new JRadioButton(
GuiActivator.getResources()
.getI18NString("service.gui.OPEN_ON_IMPORTANT_MESSAGE"));
/**
* OK button.
*/
private JButton okButton = new JButton(
GuiActivator.getResources().getI18NString("service.gui.OK"));
/**
* Cancel button.
*/
private JButton cancelButton = new JButton(
GuiActivator.getResources().getI18NString("service.gui.CANCEL"));
/**
* The property change listener for the message service.
*/
private PropertyChangeListener propertyListener = new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent e)
{
updateView();
}
};
/**
* Constructs new <tt>ChatRoomAutoOpenConfigDialog</tt> instance.
* @param chatRoomId the chat room id of the chat room associated with the
* dialog
* @param pps the protocol provider service of the chat room
*/
public ChatRoomAutoOpenConfigDialog(ProtocolProviderService pps,
final String chatRoomId)
{
this.pps = pps;
this.chatRoomId = chatRoomId;
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
value = MUCService.getChatRoomAutoOpenOption(pps, chatRoomId);
GuiActivator.getConfigurationService().addPropertyChangeListener(
MessageHistoryService.PNAME_IS_MESSAGE_HISTORY_ENABLED,
propertyListener);
GuiActivator.getConfigurationService().addPropertyChangeListener(
MessageHistoryService
.PNAME_IS_MESSAGE_HISTORY_PER_CONTACT_ENABLED_PREFIX + "."
+ chatRoomId,
propertyListener);
if(value == null)
value = MUCService.OPEN_ON_MESSAGE;
if(value.equals(MUCService.OPEN_ON_ACTIVITY))
{
openOnActivity.setSelected(true);
}
else if(value.equals(MUCService.OPEN_ON_IMPORTANT_MESSAGE))
{
openOnImportantMessage.setSelected(true);
}
else
{
openOnMessage.setSelected(true);
}
JPanel choicePanel = new TransparentPanel();
choicePanel.setLayout(new BoxLayout(choicePanel, BoxLayout.Y_AXIS));
openOnActivity.addActionListener( this );
openOnMessage.addActionListener( this );
openOnImportantMessage.addActionListener(this);
setTitle(GuiActivator.getResources()
.getI18NString("service.gui.OPEN_AUTOMATICALLY"));
openOnActivity.setOpaque(false);
openOnMessage.setOpaque(false);
openOnImportantMessage.setOpaque(false);
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(openOnActivity);
buttonGroup.add(openOnMessage);
buttonGroup.add(openOnImportantMessage);
choicePanel.add(openOnActivity);
choicePanel.add(openOnMessage);
choicePanel.add(openOnImportantMessage);
JPanel buttonPanel
= new TransparentPanel(new FlowLayout(FlowLayout.RIGHT));
updateView();
okButton.addActionListener(this);
cancelButton.addActionListener(this);
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
add(choicePanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
setPreferredSize(new Dimension(300, 140));
setVisible(true);
}
/**
* Sets enable/disable state of the buttons.
*/
private void updateView()
{
MessageHistoryService mhs
= GuiActivator.getMessageHistoryService();
if(!mhs.isHistoryLoggingEnabled()
|| !mhs.isHistoryLoggingEnabled(chatRoomId))
{
openOnImportantMessage.setEnabled(false);
openOnMessage.setEnabled(false);
openOnActivity.setSelected(true);
}
else
{
openOnImportantMessage.setEnabled(true);
openOnMessage.setEnabled(true);
}
}
@Override
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if (source instanceof JButton)
{
if(source.equals(okButton))
{
MUCService.setChatRoomAutoOpenOption(
pps,
chatRoomId, value);
}
this.dispose();
}
else if(source instanceof JRadioButton)
{
if(source.equals(openOnActivity))
{
value = MUCService.OPEN_ON_ACTIVITY;
}
else if(source.equals(openOnImportantMessage))
{
value = MUCService.OPEN_ON_IMPORTANT_MESSAGE;
}
else
{
value = MUCService.OPEN_ON_MESSAGE;
}
}
}
@Override
public void dispose()
{
GuiActivator.getConfigurationService().removePropertyChangeListener(
MessageHistoryService.PNAME_IS_MESSAGE_HISTORY_ENABLED,
propertyListener);
GuiActivator.getConfigurationService().removePropertyChangeListener(
MessageHistoryService
.PNAME_IS_MESSAGE_HISTORY_PER_CONTACT_ENABLED_PREFIX + "."
+ chatRoomId,
propertyListener);
super.dispose();
}
@Override
protected void close(boolean escaped)
{
super.close(escaped);
dispose();
}
}

@ -207,11 +207,17 @@ public void messageReceived(ChatRoomMessageReceivedEvent evt)
= GuiActivator.getUIService().getChatWindowManager(); = GuiActivator.getUIService().getChatWindowManager();
boolean createWindow = false; boolean createWindow = false;
String autoOpenConfig
MessageHistoryService mhs = GuiActivator.getMessageHistoryService(); = MUCService.getChatRoomAutoOpenOption(
sourceChatRoom.getParentProvider(),
if(!mhs.isHistoryLoggingEnabled() || sourceChatRoom.getIdentifier());
!mhs.isHistoryLoggingEnabled(sourceChatRoom.getIdentifier())) if(autoOpenConfig == null)
autoOpenConfig = MUCService.OPEN_ON_MESSAGE;
if(autoOpenConfig.equals(MUCService.OPEN_ON_ACTIVITY)
|| (autoOpenConfig.equals(MUCService.OPEN_ON_MESSAGE)
&& !evt.isHistoryMessage())
|| evt.isImportantMessage())
createWindow = true; createWindow = true;
if(sourceChatRoom.isSystem()) if(sourceChatRoom.isSystem())
@ -288,8 +294,8 @@ else if(o instanceof ChatRoomMessageReceivedEvent)
message.getContentType(), message.getContentType(),
message.getMessageUID(), message.getMessageUID(),
null); null);
if(evt.isImportantMessage() || createWindow) if(createWindow)
chatWindowManager.openChat(chatPanel, true); chatWindowManager.openChat(chatPanel, true);
} }
@ -487,14 +493,15 @@ public void run()
chatRoomWrapper, chatRoomWrapper,
ChatRoomListChangeEvent.CHAT_ROOM_CHANGED); ChatRoomListChangeEvent.CHAT_ROOM_CHANGED);
MessageHistoryService mhs
= GuiActivator.getMessageHistoryService();
boolean createWindow = false; boolean createWindow = false;
if(!mhs.isHistoryLoggingEnabled() String autoOpenConfig
|| !mhs.isHistoryLoggingEnabled( = MUCService.getChatRoomAutoOpenOption(
sourceChatRoom.getIdentifier())) sourceChatRoom.getParentProvider(),
sourceChatRoom.getIdentifier());
if(autoOpenConfig != null
&& autoOpenConfig.equals(MUCService.OPEN_ON_ACTIVITY))
createWindow = true; createWindow = true;
ChatWindowManager chatWindowManager ChatWindowManager chatWindowManager

@ -557,7 +557,7 @@ private void initActionMenuItem(
actionMenuItem = new JMenuItem(); actionMenuItem = new JMenuItem();
} }
actionMenuItem.setText(ca.getText()); actionMenuItem.setText(ca.getText(customActionContact));
actionMenuItem.setMnemonic(ca.getMnemonics()); actionMenuItem.setMnemonic(ca.getMnemonics());
@ -614,7 +614,7 @@ private void initGroupActionMenuItem(
actionMenuItem = new JMenuItem(); actionMenuItem = new JMenuItem();
} }
actionMenuItem.setText(ca.getText()); actionMenuItem.setText(ca.getText(contactSource));
actionMenuItem.setMnemonic(ca.getMnemonics()); actionMenuItem.setMnemonic(ca.getMnemonics());

@ -339,6 +339,7 @@ public void removeChatRoom(ChatRoomWrapper chatRoomWrapper)
null, // The new identifier. null, // The new identifier.
null); // The name of the chat room. null); // The name of the chat room.
chatRoomWrapper.removeListeners();
fireChatRoomListChangedEvent( fireChatRoomListChangedEvent(
chatRoomWrapper, chatRoomWrapper,
ChatRoomListChangeEvent.CHAT_ROOM_REMOVED); ChatRoomListChangeEvent.CHAT_ROOM_REMOVED);

@ -7,6 +7,9 @@
package net.java.sip.communicator.impl.muc; package net.java.sip.communicator.impl.muc;
import java.beans.*;
import net.java.sip.communicator.service.msghistory.*;
import net.java.sip.communicator.service.muc.*; import net.java.sip.communicator.service.muc.*;
import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.*;
@ -65,6 +68,29 @@ public class ChatRoomWrapperImpl
* of the chat room. * of the chat room.
*/ */
private String passwordPrefix; private String passwordPrefix;
/**
* The property change listener for the message service.
*/
private PropertyChangeListener propertyListener
= new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent e)
{
MessageHistoryService mhs = MUCActivator.getMessageHistoryService();
if(!mhs.isHistoryLoggingEnabled()
|| !mhs.isHistoryLoggingEnabled(getChatRoomID()))
{
MUCService.setChatRoomAutoOpenOption(
getParentProvider().getProtocolProvider(),
getChatRoomID(),
MUCService.OPEN_ON_ACTIVITY);
}
}
};
/** /**
* Creates a <tt>ChatRoomWrapper</tt> by specifying the protocol provider, * Creates a <tt>ChatRoomWrapper</tt> by specifying the protocol provider,
@ -86,6 +112,15 @@ public ChatRoomWrapperImpl( ChatRoomProviderWrapper parentProvider,
getParentProvider().getProtocolProvider().getAccountID() getParentProvider().getProtocolProvider().getAccountID()
.getAccountUniqueID(), chatRoomID) + ".password"; .getAccountUniqueID(), chatRoomID) + ".password";
MUCActivator.getConfigurationService().addPropertyChangeListener(
MessageHistoryService.PNAME_IS_MESSAGE_HISTORY_ENABLED,
propertyListener);
MUCActivator.getConfigurationService().addPropertyChangeListener(
MessageHistoryService
.PNAME_IS_MESSAGE_HISTORY_PER_CONTACT_ENABLED_PREFIX + "."
+ getChatRoomID(),
propertyListener);
} }
/** /**
@ -275,5 +310,18 @@ public void setAutoJoin(boolean value)
ChatRoomListChangeEvent.CHAT_ROOM_CHANGED); ChatRoomListChangeEvent.CHAT_ROOM_CHANGED);
} }
/**
* Removes the listeners.
*/
public void removeListeners()
{
MUCActivator.getConfigurationService().removePropertyChangeListener(
MessageHistoryService.PNAME_IS_MESSAGE_HISTORY_ENABLED,
propertyListener);
MUCActivator.getConfigurationService().removePropertyChangeListener(
MessageHistoryService
.PNAME_IS_MESSAGE_HISTORY_PER_CONTACT_ENABLED_PREFIX + "."
+ getChatRoomID(),
propertyListener);
}
} }

@ -13,6 +13,7 @@
import net.java.sip.communicator.service.customcontactactions.*; import net.java.sip.communicator.service.customcontactactions.*;
import net.java.sip.communicator.service.globaldisplaydetails.*; import net.java.sip.communicator.service.globaldisplaydetails.*;
import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.msghistory.*;
import net.java.sip.communicator.service.muc.*; import net.java.sip.communicator.service.muc.*;
import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.*;
@ -97,6 +98,11 @@ public class MUCActivator
*/ */
private static ProtocolProviderRegListener protocolProviderRegListener private static ProtocolProviderRegListener protocolProviderRegListener
= null; = null;
/**
* The message history service.
*/
private static MessageHistoryService messageHistoryService;
/** /**
* The global display details service instance. * The global display details service instance.
@ -414,4 +420,17 @@ public static GlobalDisplayDetailsService getGlobalDisplayDetailsService()
} }
return globalDisplayDetailsService; return globalDisplayDetailsService;
} }
/**
* Gets the service giving access to message history.
*
* @return the service giving access to message history.
*/
public static MessageHistoryService getMessageHistoryService()
{
if (messageHistoryService == null)
messageHistoryService = ServiceUtils.getService(bundleContext,
MessageHistoryService.class);
return messageHistoryService;
}
} }

@ -85,7 +85,7 @@ public class MUCCustomContactActionService
*/ */
private String[] menuActionsNames = { private String[] menuActionsNames = {
"open", "join", "join_as", "leave", "remove", "change_nick", "autojoin", "open", "join", "join_as", "leave", "remove", "change_nick", "autojoin",
"autojoin_pressed" "autojoin_pressed", "open_automatically"
}; };
/** /**
@ -96,7 +96,8 @@ public class MUCCustomContactActionService
"service.gui.JOIN_AS", "service.gui.LEAVE", "service.gui.JOIN_AS", "service.gui.LEAVE",
"service.gui.REMOVE", "service.gui.CHANGE_NICK", "service.gui.REMOVE", "service.gui.CHANGE_NICK",
"service.gui.JOIN_AUTOMATICALLY", "service.gui.JOIN_AUTOMATICALLY",
"service.gui.DONT_JOIN_AUTOMATICALLY" "service.gui.DONT_JOIN_AUTOMATICALLY",
"service.gui.OPEN_AUTOMATICALLY"
}; };
/** /**
@ -107,7 +108,7 @@ public class MUCCustomContactActionService
"service.gui.icons.JOIN_AS_ICON", "service.gui.icons.LEAVE_ICON", "service.gui.icons.JOIN_AS_ICON", "service.gui.icons.LEAVE_ICON",
"service.gui.icons.REMOVE_CHAT_ICON", "service.gui.icons.REMOVE_CHAT_ICON",
"service.gui.icons.RENAME_16x16_ICON", "service.gui.icons.RENAME_16x16_ICON",
"service.gui.icons.AUTOJOIN", "service.gui.icons.AUTOJOIN" "service.gui.icons.AUTOJOIN", "service.gui.icons.AUTOJOIN", null
}; };
/** /**
@ -257,7 +258,18 @@ public void run()
} }
}, },
autoJoinRunnable, autoJoinRunnable,
autoJoinRunnable autoJoinRunnable,
new MUCCustomActionRunnable()
{
@Override
public void run()
{
MUCActivator.getUIService().showChatRoomAutoOpenConfigDialog(
chatRoomWrapper.getParentProvider().getProtocolProvider(),
chatRoomWrapper.getChatRoomID());
}
}
}; };
/** /**
@ -272,6 +284,7 @@ public void run()
null, null,
null, null,
null, null,
null,
null null
}; };
@ -526,9 +539,21 @@ public byte[] getIcon()
@Override @Override
public String getText() public String getText(SourceContact actionSource)
{ {
return text; if(!name.equals("open_automatically"))
return text;
String openAutomaticallyValue
= MUCService.getChatRoomAutoOpenOption(
((ChatRoomSourceContact)actionSource).getProvider(),
((ChatRoomSourceContact)actionSource).getChatRoomID());
if(openAutomaticallyValue == null)
openAutomaticallyValue = MUCService.OPEN_ON_MESSAGE;
String openAutomaticallyKey = MUCService.autoOpenConfigValuesTexts
.get(openAutomaticallyValue);
return text + " (" + resources.getI18NString(openAutomaticallyKey)
+ ")";
} }
@Override @Override

@ -82,7 +82,7 @@ public byte[] getIcon()
} }
@Override @Override
public String getText() public String getText(ContactSourceService contactSource)
{ {
return resources.getI18NString("service.gui.MY_CHAT_ROOMS"); return resources.getI18NString("service.gui.MY_CHAT_ROOMS");
} }

@ -17,5 +17,6 @@ Import-Package: org.osgi.framework,
net.java.sip.communicator.service.customcontactactions, net.java.sip.communicator.service.customcontactactions,
net.java.sip.communicator.plugin.desktoputil, net.java.sip.communicator.plugin.desktoputil,
net.java.sip.communicator.plugin.desktoputil.chat, net.java.sip.communicator.plugin.desktoputil.chat,
net.java.sip.communicator.service.globaldisplaydetails net.java.sip.communicator.service.globaldisplaydetails,
net.java.sip.communicator.service.msghistory
Export-Package: net.java.sip.communicator.service.muc Export-Package: net.java.sip.communicator.service.muc

@ -33,11 +33,13 @@ public void actionPerformed(T actionSource)
/** /**
* Returns the text of the component to create for this contact * Returns the text of the component to create for this contact
* action. * action.
* *
* @param actionSource the action source for associated with the
* action.
* @return the tool tip text of the component to create for this contact * @return the tool tip text of the component to create for this contact
* action * action
*/ */
public String getText(); public String getText(T actionSource);
/** /**
* Indicates if this action is visible for the given <tt>actionSource</tt>. * Indicates if this action is visible for the given <tt>actionSource</tt>.

@ -495,4 +495,13 @@ public ContactList createContactListComponent(
* Shows Add chat room dialog. * Shows Add chat room dialog.
*/ */
public void showAddChatRoomDialog(); public void showAddChatRoomDialog();
/**
* Shows chat room open automatically configuration dialog.
* @param chatRoomId the chat room id of the chat room associated with the
* dialog
* @param pps the protocol provider service of the chat room
*/
public void showChatRoomAutoOpenConfigDialog(
ProtocolProviderService pps, String chatRoomId);
} }

@ -100,4 +100,9 @@ public interface ChatRoomWrapper
* @param value change of auto join property. * @param value change of auto join property.
*/ */
public void setAutoJoin(boolean value); public void setAutoJoin(boolean value);
/**
* Removes the listeners.
*/
public void removeListeners();
} }

@ -10,6 +10,7 @@
import net.java.sip.communicator.service.contactsource.*; import net.java.sip.communicator.service.contactsource.*;
import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*;
/** /**
* The MUC service provides interface for the chat rooms. It connects the GUI * The MUC service provides interface for the chat rooms. It connects the GUI
@ -19,6 +20,71 @@
*/ */
public abstract class MUCService public abstract class MUCService
{ {
/**
* The value for chat room configuration property to open automatically on
* activity
*/
public static String OPEN_ON_ACTIVITY = "on_activity";
/**
* The value for chat room configuration property to open automatically on
* message
*/
public static String OPEN_ON_MESSAGE = "on_message";
/**
* The value for chat room configuration property to open automatically on
* important messages.
*/
public static String OPEN_ON_IMPORTANT_MESSAGE = "on_important_message";
/**
* Map for the auto open configuration values and their text representation
*/
public static Map<String, String> autoOpenConfigValuesTexts
= new HashMap<String, String>();
static
{
autoOpenConfigValuesTexts.put(OPEN_ON_ACTIVITY,
"service.gui.OPEN_ON_ACTIVITY");
autoOpenConfigValuesTexts.put(OPEN_ON_MESSAGE,
"service.gui.OPEN_ON_MESSAGE");
autoOpenConfigValuesTexts.put(OPEN_ON_IMPORTANT_MESSAGE,
"service.gui.OPEN_ON_IMPORTANT_MESSAGE");
}
/**
* Sets chat room open automatically property
* @param pps the provider
* @param chatRoomId the chat room id
* @param value the new value for the property
*/
public static void setChatRoomAutoOpenOption(
ProtocolProviderService pps,
String chatRoomId,
String value)
{
ConfigurationUtils.updateChatRoomProperty(
pps,
chatRoomId, "openAutomatically", value);
}
/**
* Returns the value of the chat room open automatically property
* @param pps the provider
* @param chatRoomId the chat room id
* @return the value of the chat room open automatically property
*/
public static String getChatRoomAutoOpenOption(
ProtocolProviderService pps,
String chatRoomId)
{
return ConfigurationUtils.getChatRoomProperty(
pps,
chatRoomId, "openAutomatically");
}
/** /**
* Fires a <tt>ChatRoomListChangedEvent</tt> event. * Fires a <tt>ChatRoomListChangedEvent</tt> event.
* *

Loading…
Cancel
Save