package net.bible.service.device.speak.event;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/** Notify clients when speak state changes between speaking, paused, quiet
*
* @author Martin Denham [mjdenham at gmail dot com]
* @see gnu.lgpl.License for license details.<br>
* The copyright to this program is held by it's author.
*/
public class SpeakEventManager {
private List<SpeakEventListener> speakEventListeners = new CopyOnWriteArrayList<SpeakEventListener>();
private static final SpeakEventManager speakEventManager = new SpeakEventManager();
private SpeakEvent lastEvent;
public static SpeakEventManager getInstance() {
return speakEventManager;
}
public void addSpeakEventListener(SpeakEventListener listener)
{
speakEventListeners.add(listener);
if (lastEvent!=null) {
// refire last speak event in case state is not default when listener registers or was unregistered when state changed
listener.speakStateChange(lastEvent);
}
}
public void removeSpeakEventListener(SpeakEventListener listener)
{
speakEventListeners.remove(listener);
}
public void speakStateChanged(SpeakEvent speakEvent) {
// loop through each listener and pass on the event if needed
for (SpeakEventListener listener : speakEventListeners) {
// pass the event to the listeners event dispatch method
listener.speakStateChange(speakEvent);
}
lastEvent = speakEvent;
}
}