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_IN_BROWSER=Open in &browser
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_ENTER_PHONE_NUMBER=Or enter phone number here...
service.gui.ORGANIZATION=Organization

@ -1607,4 +1607,16 @@ public void showAddChatRoomDialog()
{
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();
boolean createWindow = false;
MessageHistoryService mhs = GuiActivator.getMessageHistoryService();
if(!mhs.isHistoryLoggingEnabled() ||
!mhs.isHistoryLoggingEnabled(sourceChatRoom.getIdentifier()))
String autoOpenConfig
= MUCService.getChatRoomAutoOpenOption(
sourceChatRoom.getParentProvider(),
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;
if(sourceChatRoom.isSystem())
@ -288,8 +294,8 @@ else if(o instanceof ChatRoomMessageReceivedEvent)
message.getContentType(),
message.getMessageUID(),
null);
if(evt.isImportantMessage() || createWindow)
if(createWindow)
chatWindowManager.openChat(chatPanel, true);
}
@ -487,14 +493,15 @@ public void run()
chatRoomWrapper,
ChatRoomListChangeEvent.CHAT_ROOM_CHANGED);
MessageHistoryService mhs
= GuiActivator.getMessageHistoryService();
boolean createWindow = false;
if(!mhs.isHistoryLoggingEnabled()
|| !mhs.isHistoryLoggingEnabled(
sourceChatRoom.getIdentifier()))
String autoOpenConfig
= MUCService.getChatRoomAutoOpenOption(
sourceChatRoom.getParentProvider(),
sourceChatRoom.getIdentifier());
if(autoOpenConfig != null
&& autoOpenConfig.equals(MUCService.OPEN_ON_ACTIVITY))
createWindow = true;
ChatWindowManager chatWindowManager

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

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

@ -7,6 +7,9 @@
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.protocol.*;
import net.java.sip.communicator.util.*;
@ -65,6 +68,29 @@ public class ChatRoomWrapperImpl
* of the chat room.
*/
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,
@ -86,6 +112,15 @@ public ChatRoomWrapperImpl( ChatRoomProviderWrapper parentProvider,
getParentProvider().getProtocolProvider().getAccountID()
.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);
}
/**
* 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.globaldisplaydetails.*;
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.protocol.*;
import net.java.sip.communicator.util.*;
@ -97,6 +98,11 @@ public class MUCActivator
*/
private static ProtocolProviderRegListener protocolProviderRegListener
= null;
/**
* The message history service.
*/
private static MessageHistoryService messageHistoryService;
/**
* The global display details service instance.
@ -414,4 +420,17 @@ public static GlobalDisplayDetailsService getGlobalDisplayDetailsService()
}
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 = {
"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.REMOVE", "service.gui.CHANGE_NICK",
"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.REMOVE_CHAT_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,
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
};
@ -526,9 +539,21 @@ public byte[] getIcon()
@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

@ -82,7 +82,7 @@ public byte[] getIcon()
}
@Override
public String getText()
public String getText(ContactSourceService contactSource)
{
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.plugin.desktoputil,
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

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

@ -495,4 +495,13 @@ public ContactList createContactListComponent(
* Shows Add chat room dialog.
*/
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.
*/
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.protocol.*;
import net.java.sip.communicator.util.*;
/**
* The MUC service provides interface for the chat rooms. It connects the GUI
@ -19,6 +20,71 @@
*/
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.
*

Loading…
Cancel
Save