/* * SIP Communicator, 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.audionotifier; import java.net.*; import java.util.*; import net.java.sip.communicator.service.audionotifier.*; /** * The implementation of the AudioNotifierService. * * @author Yana Stamcheva */ public class AudioNotifierServiceImpl implements AudioNotifierService { public static final Map<String, SCAudioClipImpl> audioClips = new HashMap<String, SCAudioClipImpl>(); private boolean isMute; /** * Creates an SCAudioClip from the given URI and adds it to the list of * available audio-s. * * @param uri the path where the audio file could be found */ public SCAudioClip createAudio(String uri) { SCAudioClipImpl audioClip; synchronized (audioClips) { if(audioClips.containsKey(uri)) { audioClip = audioClips.get(uri); } else { URL url = AudioNotifierActivator.getResources().getSoundURLForPath(uri); if (url == null) { // Not found by the class loader. Perhaps it's a local file. try { url = new URL(uri); } catch (MalformedURLException e) { //logger.error("The given uri could not be parsed.", e); } } audioClip = new SCAudioClipImpl(url, this); audioClips.put(uri, audioClip); } } return audioClip; } public SCAudioClip createAudio(URL url) { SCAudioClipImpl audioClip; synchronized (audioClips) { { audioClip = new SCAudioClipImpl(url, this); } } return audioClip; } /** * Removes the given audio from the list of available audio clips. * * @param audioClip the audio to destroy */ public void destroyAudio(SCAudioClip audioClip) { synchronized (audioClips) { audioClips.remove(audioClip); } } /** * Enables or disables the sound in the application. If FALSE, we try to * restore all looping sounds if any. * * @param isMute when TRUE disables the sound, otherwise enables the sound. */ public void setMute(boolean isMute) { this.isMute = isMute; for (SCAudioClipImpl audioClip : audioClips.values()) { if (isMute) { audioClip.internalStop(); } else if (audioClip.isLooping()) { audioClip.playInLoop(audioClip.getLoopInterval()); } } } /** * Returns TRUE if the sound is currently disabled, FALSE otherwise. * @return TRUE if the sound is currently disabled, FALSE otherwise */ public boolean isMute() { return isMute; } }