diff --git a/src/net/java/sip/communicator/impl/gui/utils/NotificationManager.java b/src/net/java/sip/communicator/impl/gui/utils/NotificationManager.java
index ff9fdb2c3..d07503012 100644
--- a/src/net/java/sip/communicator/impl/gui/utils/NotificationManager.java
+++ b/src/net/java/sip/communicator/impl/gui/utils/NotificationManager.java
@@ -293,6 +293,8 @@ public static void stopSound(String eventType)
.getEventNotificationActionHandler(
eventType, NotificationService.ACTION_SOUND);
- soundHandler.stop();
+ // There can be no sound action handler for this event type
+ if(soundHandler != null)
+ soundHandler.stop();
}
}
diff --git a/src/net/java/sip/communicator/impl/notification/CommandNotificationHandlerImpl.java b/src/net/java/sip/communicator/impl/notification/CommandNotificationHandlerImpl.java
index 8dff174ae..7ec4c4cf2 100644
--- a/src/net/java/sip/communicator/impl/notification/CommandNotificationHandlerImpl.java
+++ b/src/net/java/sip/communicator/impl/notification/CommandNotificationHandlerImpl.java
@@ -45,6 +45,9 @@ public CommandNotificationHandlerImpl(String commandDescriptor)
*/
public void execute()
{
+ if(StringUtils.isNullOrEmpty(commandDescriptor, true))
+ return;
+
try
{
Runtime.getRuntime().exec(commandDescriptor);
diff --git a/src/net/java/sip/communicator/impl/notification/SoundNotificationHandlerImpl.java b/src/net/java/sip/communicator/impl/notification/SoundNotificationHandlerImpl.java
index d1f54dff4..34d8e901f 100644
--- a/src/net/java/sip/communicator/impl/notification/SoundNotificationHandlerImpl.java
+++ b/src/net/java/sip/communicator/impl/notification/SoundNotificationHandlerImpl.java
@@ -8,6 +8,7 @@
import net.java.sip.communicator.service.audionotifier.*;
import net.java.sip.communicator.service.notification.*;
+import net.java.sip.communicator.util.*;
/**
* An implementation of the SoundNotificationHandlerImpl interface.
@@ -80,7 +81,8 @@ public void start()
AudioNotifierService audioNotifService
= NotificationActivator.getAudioNotifier();
- if(audioNotifService == null)
+ if(audioNotifService == null
+ || StringUtils.isNullOrEmpty(soundFileDescriptor, true))
return;
audio = audioNotifService.createAudio(soundFileDescriptor);
diff --git a/src/net/java/sip/communicator/plugin/notificationconfiguration/NotificationConfigurationPanel.java b/src/net/java/sip/communicator/plugin/notificationconfiguration/NotificationConfigurationPanel.java
index a3b94d745..92c2949ff 100644
--- a/src/net/java/sip/communicator/plugin/notificationconfiguration/NotificationConfigurationPanel.java
+++ b/src/net/java/sip/communicator/plugin/notificationconfiguration/NotificationConfigurationPanel.java
@@ -15,6 +15,7 @@
import javax.swing.event.*;
import net.java.sip.communicator.service.audionotifier.*;
+import net.java.sip.communicator.service.notification.*;
import net.java.sip.communicator.util.*;
import net.java.sip.communicator.util.swing.*;
@@ -55,6 +56,12 @@ public class NotificationConfigurationPanel
private SipCommFileChooser fileChooserProgram;
private SipCommFileChooser fileChooserSound;
+ /**
+ * Used to suppress saving entry values while filling
+ * programFileTextField and soundFileTextField.
+ */
+ private boolean isCurrentlyChangeEntryInTable = false;
+
/**
* Creates an instance of NotificationConfigurationPanel.
*/
@@ -173,6 +180,8 @@ private void initNotificationsList()
*/
public void setNotificationEntry(NotificationEntry entry)
{
+ isCurrentlyChangeEntryInTable = true;
+
programFileChooser.setEnabled(entry.getProgram());
programFileTextField.setEnabled(entry.getProgram());
@@ -186,6 +195,8 @@ public void setNotificationEntry(NotificationEntry entry)
String soundFile = entry.getSoundFile();
soundFileTextField.setText(
(soundFile != null && soundFile.length() > 0) ? soundFile : "");
+
+ isCurrentlyChangeEntryInTable = false;
}
/**
@@ -292,16 +303,37 @@ else if(e.getSource() == playSoundButton)
*/
public void insertUpdate(DocumentEvent event)
{
+ // we are just changing display values, no real change in data
+ // to save it
+ if(isCurrentlyChangeEntryInTable)
+ return;
+
NotificationEntry entry = notificationList.getNotificationEntry(
notificationList.getSelectedRow());
if(event.getDocument().equals(programFileTextField.getDocument()))
{
entry.setProgramFile(programFileTextField.getText());
+
+ NotificationConfigurationActivator.getNotificationService()
+ .registerNotificationForEvent(
+ entry.getEvent(),
+ NotificationService.ACTION_COMMAND,
+ entry.getProgramFile(),
+ ""
+ );
}
if(event.getDocument().equals(soundFileTextField.getDocument()))
{
entry.setSoundFile(soundFileTextField.getText());
+
+ NotificationConfigurationActivator.getNotificationService()
+ .registerNotificationForEvent(
+ entry.getEvent(),
+ NotificationService.ACTION_SOUND,
+ entry.getSoundFile(),
+ ""
+ );
}
}
@@ -311,16 +343,37 @@ public void insertUpdate(DocumentEvent event)
*/
public void removeUpdate(DocumentEvent event)
{
+ // we are just changing display values, no real change in data
+ // to save it
+ if(isCurrentlyChangeEntryInTable)
+ return;
+
NotificationEntry entry = notificationList.getNotificationEntry(
notificationList.getSelectedRow());
if(event.getDocument().equals(programFileTextField.getDocument()))
{
entry.setProgramFile(programFileTextField.getText());
+
+ NotificationConfigurationActivator.getNotificationService()
+ .registerNotificationForEvent(
+ entry.getEvent(),
+ NotificationService.ACTION_COMMAND,
+ entry.getProgramFile(),
+ ""
+ );
}
if(event.getDocument().equals(soundFileTextField.getDocument()))
{
entry.setSoundFile(soundFileTextField.getText());
+
+ NotificationConfigurationActivator.getNotificationService()
+ .registerNotificationForEvent(
+ entry.getEvent(),
+ NotificationService.ACTION_SOUND,
+ entry.getSoundFile(),
+ ""
+ );
}
}
diff --git a/src/net/java/sip/communicator/plugin/notificationconfiguration/NotificationsTable.java b/src/net/java/sip/communicator/plugin/notificationconfiguration/NotificationsTable.java
index 59bd8ff33..78b737472 100644
--- a/src/net/java/sip/communicator/plugin/notificationconfiguration/NotificationsTable.java
+++ b/src/net/java/sip/communicator/plugin/notificationconfiguration/NotificationsTable.java
@@ -272,8 +272,7 @@ private NotificationEntry getNotificationEntry(String eventName)
{
for (int row = 0; row < notifTable.getRowCount(); row++)
{
- NotificationEntry entry = (NotificationEntry) notifTable
- .getValueAt(row, notifTable.getColumnCount() - 1);
+ NotificationEntry entry = getNotificationEntry(row);
if (entry.getEvent() == eventName)
return entry;
@@ -309,8 +308,7 @@ private int indexOfEntry(NotificationEntry entry)
{
for (int row = 0; row < notifTable.getRowCount(); row++)
{
- NotificationEntry e = (NotificationEntry) notifTable
- .getValueAt(row, notifTable.getColumnCount() - 1);
+ NotificationEntry e = getNotificationEntry(row);
if (e.equals(entry))
return row;
@@ -440,9 +438,8 @@ public void mouseClicked(MouseEvent e)
else
notifTable.setValueAt(ENABLED, row, col);
- NotificationEntry entry = (NotificationEntry) notifTable
- .getValueAt(row, notifTable.getColumnCount() - 1);
-
+ NotificationEntry entry = getNotificationEntry(row);
+
switch(col)
{
case 0:
@@ -460,15 +457,19 @@ public void mouseClicked(MouseEvent e)
entry.setProgram(isProgram);
if(isProgram)
+ {
notificationService.registerNotificationForEvent(
entry.getEvent(),
NotificationService.ACTION_COMMAND,
entry.getProgramFile(),
"");
+ }
else
+ {
notificationService.removeEventNotificationAction(
entry.getEvent(),
NotificationService.ACTION_COMMAND);
+ }
break;
case 2:
boolean isPopup = notifTable.getValueAt(row, 2).equals(ENABLED);
@@ -494,17 +495,23 @@ public void mouseClicked(MouseEvent e)
entry.setSound(isSound);
if (isSound)
+ {
notificationService.registerNotificationForEvent(
entry.getEvent(),
NotificationService.ACTION_SOUND,
entry.getSoundFile(),
"");
+ }
else
+ {
notificationService.removeEventNotificationAction(
entry.getEvent(),
NotificationService.ACTION_SOUND);
+ }
break;
};
+
+ configPanel.setNotificationEntry(entry);
}
}