From 5874178227a1c730e563ffae6ca4d016e063cf36 Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Fri, 19 Oct 2012 19:40:11 +0000 Subject: Renames a couple of methods upon request by Emil Ivov. Fixes an endless loop on hangup. Commits work in progress on sound notifications. --- .../notification/SoundNotificationHandlerImpl.java | 79 +++++++++++++--------- 1 file changed, 46 insertions(+), 33 deletions(-) (limited to 'src/net/java/sip/communicator/impl/notification') diff --git a/src/net/java/sip/communicator/impl/notification/SoundNotificationHandlerImpl.java b/src/net/java/sip/communicator/impl/notification/SoundNotificationHandlerImpl.java index c3e4ab2..5e6156f 100644 --- a/src/net/java/sip/communicator/impl/notification/SoundNotificationHandlerImpl.java +++ b/src/net/java/sip/communicator/impl/notification/SoundNotificationHandlerImpl.java @@ -90,7 +90,10 @@ public class SoundNotificationHandlerImpl { case NOTIFICATION: case PLAYBACK: - audio = audioNotifService.createAudio(action.getDescriptor(), SCAudioClipDevice.PLAYBACK.equals(device)); + audio + = audioNotifService.createAudio( + action.getDescriptor(), + SCAudioClipDevice.PLAYBACK.equals(device)); break; case PC_SPEAKER: @@ -104,14 +107,25 @@ public class SoundNotificationHandlerImpl playedClips.put(audio, data); - @SuppressWarnings("unchecked") - Callable loopCondition - = (Callable) - data.getExtra( - NotificationData - .SOUND_NOTIFICATION_HANDLER_LOOP_CONDITION_EXTRA); + boolean played = false; - audio.play(action.getLoopInterval(), loopCondition); + try + { + @SuppressWarnings("unchecked") + Callable loopCondition + = (Callable) + data.getExtra( + NotificationData + .SOUND_NOTIFICATION_HANDLER_LOOP_CONDITION_EXTRA); + + audio.play(action.getLoopInterval(), loopCondition); + played = true; + } + finally + { + if (!played) + playedClips.remove(audio); + } } /** @@ -119,26 +133,17 @@ public class SoundNotificationHandlerImpl * * @param isMute mute or not currently playing sounds */ - public void setMute(boolean isMute) + public void setMute(boolean mute) { - this.mute = isMute; + this.mute = mute; - if(isMute) + if (mute) { - AudioNotifierService audioNotifService + AudioNotifierService ans = NotificationActivator.getAudioNotifier(); - if(audioNotifService == null) - return; - - // stop all sounds - for (Map.Entry entry : playedClips - .entrySet()) - { - SCAudioClip audio = entry.getKey(); - audio.stop(); - audioNotifService.destroyAudio(audio); - } + if ((ans != null) && (ans.isMute() != this.mute)) + ans.setMute(this.mute); } } @@ -193,18 +198,26 @@ public class SoundNotificationHandlerImpl AudioNotifierService audioNotifService = NotificationActivator.getAudioNotifier(); - if(audioNotifService == null) - return; - - for (Map.Entry entry - : playedClips.entrySet()) + if (audioNotifService != null) { - if(entry.getValue() == data) - { - SCAudioClip audio = entry.getKey(); + Iterator> i + = playedClips.entrySet().iterator(); - audio.stop(); - audioNotifService.destroyAudio(audio); + while (i.hasNext()) + { + Map.Entry e = i.next(); + + if (e.getValue() == data) + { + try + { + e.getKey().stop(); + } + finally + { + i.remove(); + } + } } } } -- cgit v1.1