diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java index 9cfeccd12..d06bc4c64 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java @@ -336,28 +336,20 @@ private void createSoundLevelIndicators() add(remoteLevelPanel, constraints); - this.callPeer.addStreamSoundLevelListener(new SoundLevelListener() + this.callPeer.addStreamSoundLevelListener(new SoundLevelListener() { - public void soundLevelChanged(SoundLevelChangeEvent event) + public void soundLevelChanged(SoundLevelChangeEvent event) { - Collection levels = event.getLevels().values(); - - if(!levels.isEmpty()) - remoteLevelIndicator.updateSoundLevel( - levels.iterator().next()); + remoteLevelIndicator.updateSoundLevel(event.getLevel()); } }); this.callPeer.getCall().addLocalUserSoundLevelListener( - new SoundLevelListener() + new SoundLevelListener() { - public void soundLevelChanged(SoundLevelChangeEvent event) + public void soundLevelChanged(SoundLevelChangeEvent event) { - Collection levels = event.getLevels().values(); - - if(!levels.isEmpty()) - localLevelIndicator.updateSoundLevel( - levels.iterator().next()); + localLevelIndicator.updateSoundLevel(event.getLevel()); } }); } diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferenceCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferenceCallPanel.java index f89a91c08..0fd018e55 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferenceCallPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferenceCallPanel.java @@ -126,15 +126,11 @@ private void addLocalCallPeer() mainPanel.add(localPeerPanel, constraints); - call.addLocalUserSoundLevelListener(new SoundLevelListener() + call.addLocalUserSoundLevelListener(new SoundLevelListener() { - public void soundLevelChanged(SoundLevelChangeEvent evt) + public void soundLevelChanged(SoundLevelChangeEvent evt) { - if(evt.getLevels().size() > 0) - { - localPeerPanel.fireLocalUserSoundLevelChanged( - evt.getLevels().values().iterator().next()); - } + localPeerPanel.fireLocalUserSoundLevelChanged(evt.getLevel()); } }); } diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java index ea0dd4f06..08ac9dd10 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java @@ -500,7 +500,7 @@ ConferenceMembersSoundLevelListener getConferenceMembersSoundLevelListener() { if(conferenceMembersSoundLevelListener == null) conferenceMembersSoundLevelListener = - new ConferenceMembersSoundLevelListener(); + new ConfMembersSoundLevelListener(); return conferenceMembersSoundLevelListener; } @@ -521,19 +521,19 @@ StreamSoundLevelListener getStreamSoundLevelListener() * Updates according sound level indicators to reflect the new member sound * level. */ - private class ConferenceMembersSoundLevelListener - implements SoundLevelListener + private class ConfMembersSoundLevelListener + implements ConferenceMembersSoundLevelListener { - /** * Delivers SoundLevelChangeEvents on conference member * sound level change. * * @param e the notification event containing the list of changes. */ - public void soundLevelChanged(SoundLevelChangeEvent e) + public void soundLevelChanged( + ConferenceMembersSoundLevelEvent event) { - Map levels = e.getLevels(); + Map levels = event.getLevels(); Iterator> memberPanelsIter = conferenceMembersPanels.entrySet().iterator(); @@ -551,14 +551,14 @@ public void soundLevelChanged(SoundLevelChangeEvent e) else memberPanel.updateSoundBar(0); } - } + } } /** * Updates the sound bar level to fit the new stream sound level. */ private class StreamSoundLevelListener - implements SoundLevelListener + implements SoundLevelListener { /** @@ -566,14 +566,13 @@ private class StreamSoundLevelListener * * @param evt the notification event containing the list of changes. */ - public void soundLevelChanged(SoundLevelChangeEvent evt) + public void soundLevelChanged(SoundLevelChangeEvent evt) { if (evt.getSource() instanceof CallPeer && ((CallPeer)evt.getSource()).isConferenceFocus()) return; - if(evt.getLevels().size() > 0) - updateSoundBar(evt.getLevels().values().iterator().next()); + updateSoundBar(evt.getLevel()); } } } diff --git a/src/net/java/sip/communicator/impl/protocol/gibberish/CallGibberishImpl.java b/src/net/java/sip/communicator/impl/protocol/gibberish/CallGibberishImpl.java index 6a6550a5e..978b7e91a 100644 --- a/src/net/java/sip/communicator/impl/protocol/gibberish/CallGibberishImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/gibberish/CallGibberishImpl.java @@ -181,7 +181,7 @@ public boolean isConferenceFocus() * @param l the SoundLevelListener to add */ public void addLocalUserSoundLevelListener( - SoundLevelListener l) + SoundLevelListener l) { } @@ -193,7 +193,7 @@ public void addLocalUserSoundLevelListener( * @param l the SoundLevelListener to remove */ public void removeLocalUserSoundLevelListener( - SoundLevelListener l) + SoundLevelListener l) { } diff --git a/src/net/java/sip/communicator/impl/protocol/gibberish/CallPeerGibberishImpl.java b/src/net/java/sip/communicator/impl/protocol/gibberish/CallPeerGibberishImpl.java index 8f01e4b7d..65b8e0012 100644 --- a/src/net/java/sip/communicator/impl/protocol/gibberish/CallPeerGibberishImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/gibberish/CallPeerGibberishImpl.java @@ -42,8 +42,9 @@ public class CallPeerGibberishImpl /** * A list of listeners registered for stream user sound level events. */ - private final List confMemebrSoundLevelListeners - = new Vector(); + private final List + confMemebrSoundLevelListeners + = new Vector(); /** * Creates an instance of CallPeerGibberishImpl by specifying the @@ -180,7 +181,7 @@ public ProtocolProviderService getProtocolProvider() * @param listener the SoundLevelListener to add */ public void addStreamSoundLevelListener( - SoundLevelListener listener) + SoundLevelListener listener) { synchronized(soundLevelListeners) { @@ -197,7 +198,7 @@ public void addStreamSoundLevelListener( * @param listener the SoundLevelListener to remove */ public void removeStreamSoundLevelListener( - SoundLevelListener listener) + SoundLevelListener listener) { synchronized(soundLevelListeners) { @@ -213,7 +214,7 @@ public void removeStreamSoundLevelListener( * @param listener the SoundLevelListener to add */ public void addConferenceMembersSoundLevelListener( - SoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { synchronized(confMemebrSoundLevelListeners) { @@ -231,7 +232,7 @@ public void addConferenceMembersSoundLevelListener( * remove */ public void removeConferenceMembersSoundLevelListener( - SoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { synchronized(confMemebrSoundLevelListeners) { @@ -247,12 +248,10 @@ public void removeConferenceMembersSoundLevelListener( */ void fireStreamSoundLevelEvent(int level) { - Map lev = new HashMap(); - lev.put(0l, level); - SoundLevelChangeEvent event - = new SoundLevelChangeEvent(this, lev); + SoundLevelChangeEvent event + = new SoundLevelChangeEvent(this, level); - SoundLevelListener[] ls; + SoundLevelListener[] ls; synchronized(soundLevelListeners) { @@ -260,7 +259,7 @@ void fireStreamSoundLevelEvent(int level) new SoundLevelListener[soundLevelListeners.size()]); } - for (SoundLevelListener listener : ls) + for (SoundLevelListener listener : ls) { listener.soundLevelChanged(event); } @@ -275,18 +274,19 @@ void fireStreamSoundLevelEvent(int level) void fireConferenceMembersSoundLevelEvent( Map levels) { - SoundLevelChangeEvent event - = new SoundLevelChangeEvent(this, levels); + ConferenceMembersSoundLevelEvent event + = new ConferenceMembersSoundLevelEvent(this, levels); - SoundLevelListener[] ls; + ConferenceMembersSoundLevelListener[] ls; synchronized(confMemebrSoundLevelListeners) { ls = confMemebrSoundLevelListeners.toArray( - new SoundLevelListener[confMemebrSoundLevelListeners.size()]); + new ConferenceMembersSoundLevelListener[ + confMemebrSoundLevelListeners.size()]); } - for (SoundLevelListener listener : ls) + for (ConferenceMembersSoundLevelListener listener : ls) { listener.soundLevelChanged(event); } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/CallJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/CallJabberImpl.java index 065f801e7..f634d2ef4 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/CallJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/CallJabberImpl.java @@ -277,7 +277,7 @@ public boolean isConferenceFocus() * @param l the SoundLevelListener to add */ public void addLocalUserSoundLevelListener( - SoundLevelListener l) + SoundLevelListener l) { } @@ -289,7 +289,7 @@ public void addLocalUserSoundLevelListener( * @param l the SoundLevelListener to remove */ public void removeLocalUserSoundLevelListener( - SoundLevelListener l) + SoundLevelListener l) { } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/CallPeerJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/CallPeerJabberImpl.java index d98e5e63e..99790c90a 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/CallPeerJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/CallPeerJabberImpl.java @@ -257,7 +257,7 @@ public Contact getContact() * @param listener the SoundLevelListener to add */ public void addStreamSoundLevelListener( - SoundLevelListener listener) + SoundLevelListener listener) { } @@ -270,7 +270,7 @@ public void addStreamSoundLevelListener( * @param listener the SoundLevelListener to remove */ public void removeStreamSoundLevelListener( - SoundLevelListener listener) + SoundLevelListener listener) { } @@ -283,7 +283,7 @@ public void removeStreamSoundLevelListener( * @param listener the SoundLevelListener to add */ public void addConferenceMembersSoundLevelListener( - SoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { } @@ -297,7 +297,7 @@ public void addConferenceMembersSoundLevelListener( * remove */ public void removeConferenceMembersSoundLevelListener( - SoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { } diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockCall.java b/src/net/java/sip/communicator/impl/protocol/mock/MockCall.java index ab1f50509..60c4567d7 100644 --- a/src/net/java/sip/communicator/impl/protocol/mock/MockCall.java +++ b/src/net/java/sip/communicator/impl/protocol/mock/MockCall.java @@ -154,7 +154,7 @@ public boolean isConferenceFocus() * @param l the SoundLevelListener to add */ public void addLocalUserSoundLevelListener( - SoundLevelListener l) + SoundLevelListener l) { } @@ -166,7 +166,7 @@ public void addLocalUserSoundLevelListener( * @param l the SoundLevelListener to remove */ public void removeLocalUserSoundLevelListener( - SoundLevelListener l) + SoundLevelListener l) { } diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockCallPeer.java b/src/net/java/sip/communicator/impl/protocol/mock/MockCallPeer.java index 3d7410538..e96abac68 100644 --- a/src/net/java/sip/communicator/impl/protocol/mock/MockCallPeer.java +++ b/src/net/java/sip/communicator/impl/protocol/mock/MockCallPeer.java @@ -125,7 +125,7 @@ public ProtocolProviderService getProtocolProvider() * @param listener the SoundLevelListener to add */ public void addStreamSoundLevelListener( - SoundLevelListener listener) + SoundLevelListener listener) { } @@ -138,7 +138,7 @@ public void addStreamSoundLevelListener( * @param listener the SoundLevelListener to remove */ public void removeStreamSoundLevelListener( - SoundLevelListener listener) + SoundLevelListener listener) { } @@ -151,7 +151,7 @@ public void removeStreamSoundLevelListener( * @param listener the SoundLevelListener to add */ public void addConferenceMembersSoundLevelListener( - SoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { } @@ -165,7 +165,7 @@ public void addConferenceMembersSoundLevelListener( * remove */ public void removeConferenceMembersSoundLevelListener( - SoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { } diff --git a/src/net/java/sip/communicator/impl/protocol/sip/CallPeerSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/CallPeerSipImpl.java index 649bfffe6..b4231f173 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/CallPeerSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/CallPeerSipImpl.java @@ -1688,7 +1688,7 @@ public void setState(CallPeerState newState, String reason) * * @param listener the SoundLevelListener to add */ - public void addStreamSoundLevelListener(SoundLevelListener listener) + public void addStreamSoundLevelListener(SoundLevelListener listener) { // if we are not conference focus we just save the listeners // if we become focus we must add them. @@ -1716,7 +1716,7 @@ public void addStreamSoundLevelListener(SoundLevelListener listener) * * @param listener the SoundLevelListener to remove */ - public void removeStreamSoundLevelListener(SoundLevelListener listener) + public void removeStreamSoundLevelListener(SoundLevelListener listener) { SoundLevelListenerWrapperForStream sli = null; @@ -1731,14 +1731,14 @@ public void removeStreamSoundLevelListener(SoundLevelListener listener) } /** - * Adds a specific SoundLevelListener to the list + * Adds a specific ConferenceMembersSoundLevelListener to the list * of listeners interested in and notified about changes in conference * members sound level. * - * @param listener the SoundLevelListener to add + * @param listener the ConferenceMembersSoundLevelListener to add */ public void addConferenceMembersSoundLevelListener( - SoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { } @@ -1747,11 +1747,11 @@ public void addConferenceMembersSoundLevelListener( * list of listeners interested in and notified about changes in conference * members sound level. * - * @param listener the SoundLevelListener to + * @param listener the ConferenceMembersSoundLevelListener to * remove */ public void removeConferenceMembersSoundLevelListener( - SoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { } @@ -1822,14 +1822,14 @@ private class SoundLevelListenerWrapperForStream /** * The wrapped listener. */ - private SoundLevelListener listener; + private SoundLevelListener listener; /** * Create the wrapper. * @param listener */ public SoundLevelListenerWrapperForStream( - SoundLevelListener listener) + SoundLevelListener listener) { this.listener = listener; } @@ -1845,9 +1845,11 @@ public void soundLevelChanged( { Map levels = evt.getLevels(); - listener.soundLevelChanged( - new SoundLevelChangeEvent( - CallPeerSipImpl.this, levels)); + if(!levels.isEmpty()) + listener.soundLevelChanged( + new SoundLevelChangeEvent( + CallPeerSipImpl.this, + levels.values().iterator().next())); } } } diff --git a/src/net/java/sip/communicator/impl/protocol/sip/CallSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/CallSipImpl.java index 7fed2f478..f98f009f1 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/CallSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/CallSipImpl.java @@ -699,7 +699,7 @@ MediaDevice getDefaultDevice(MediaType mediaType) * related information. * @param l the SoundLevelListener to add */ - public void addLocalUserSoundLevelListener(SoundLevelListener l) + public void addLocalUserSoundLevelListener(SoundLevelListener l) { LocalSoundLevelListener sli = new LocalSoundLevelListener(l); synchronized(localSoundLevelListeners) @@ -752,12 +752,12 @@ private class LocalSoundLevelListener /** * Holds the listener we wrap. */ - private SoundLevelListener soundLevelListener; + private SoundLevelListener soundLevelListener; /** * @param soundLevelListener the listener we wrap. */ - public LocalSoundLevelListener(SoundLevelListener soundLevelListener) + public LocalSoundLevelListener(SoundLevelListener soundLevelListener) { this.soundLevelListener = soundLevelListener; } @@ -772,9 +772,12 @@ public LocalSoundLevelListener(SoundLevelListener soundLevelListener) public void soundLevelChanged( net.java.sip.communicator.service.neomedia.event.SoundLevelChangeEvent evt) { - soundLevelListener.soundLevelChanged( - new SoundLevelChangeEvent( - CallSipImpl.this, evt.getLevels())); + // there must be one level in the result + if(!evt.getLevels().isEmpty()) + soundLevelListener.soundLevelChanged( + new SoundLevelChangeEvent( + CallSipImpl.this, + evt.getLevels().values().iterator().next())); } } } diff --git a/src/net/java/sip/communicator/service/protocol/Call.java b/src/net/java/sip/communicator/service/protocol/Call.java index 4c64cd0ee..b438a41ce 100644 --- a/src/net/java/sip/communicator/service/protocol/Call.java +++ b/src/net/java/sip/communicator/service/protocol/Call.java @@ -330,8 +330,7 @@ public boolean isSipZrtpAttribute() * related information. * @param l the SoundLevelListener to add */ - public abstract void addLocalUserSoundLevelListener( - SoundLevelListener l); + public abstract void addLocalUserSoundLevelListener(SoundLevelListener l); /** * Removes a specific SoundLevelListener of the list of @@ -339,6 +338,5 @@ public abstract void addLocalUserSoundLevelListener( * related information. * @param l the SoundLevelListener to remove */ - public abstract void removeLocalUserSoundLevelListener( - SoundLevelListener l); + public abstract void removeLocalUserSoundLevelListener(SoundLevelListener l); } diff --git a/src/net/java/sip/communicator/service/protocol/CallPeer.java b/src/net/java/sip/communicator/service/protocol/CallPeer.java index 591088a78..48ed3a567 100644 --- a/src/net/java/sip/communicator/service/protocol/CallPeer.java +++ b/src/net/java/sip/communicator/service/protocol/CallPeer.java @@ -263,8 +263,7 @@ public void removeCallPeerConferenceListener( * * @param listener the SoundLevelListener to add */ - public void addStreamSoundLevelListener( - SoundLevelListener listener); + public void addStreamSoundLevelListener(SoundLevelListener listener); /** * Removes a specific SoundLevelListener of the list of @@ -273,8 +272,7 @@ public void addStreamSoundLevelListener( * * @param listener the SoundLevelListener to remove */ - public void removeStreamSoundLevelListener( - SoundLevelListener listener); + public void removeStreamSoundLevelListener(SoundLevelListener listener); /** * Adds a specific SoundLevelListener to the list @@ -284,7 +282,7 @@ public void removeStreamSoundLevelListener( * @param listener the SoundLevelListener to add */ public void addConferenceMembersSoundLevelListener( - SoundLevelListener listener); + ConferenceMembersSoundLevelListener listener); /** * Removes a specific SoundLevelListener of the @@ -295,5 +293,5 @@ public void addConferenceMembersSoundLevelListener( * remove */ public void removeConferenceMembersSoundLevelListener( - SoundLevelListener listener); + ConferenceMembersSoundLevelListener listener); } diff --git a/src/net/java/sip/communicator/service/protocol/event/ConferenceMembersSoundLevelEvent.java b/src/net/java/sip/communicator/service/protocol/event/ConferenceMembersSoundLevelEvent.java new file mode 100644 index 000000000..2e5197705 --- /dev/null +++ b/src/net/java/sip/communicator/service/protocol/event/ConferenceMembersSoundLevelEvent.java @@ -0,0 +1,81 @@ +/* + * 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.service.protocol.event; + +import java.util.*; + +import net.java.sip.communicator.service.protocol.*; + +/** + * Notifies interested parties in ConferenceMembers sound level changes. + * When a CallPeer is participating in the conference also as a + * ConferenceMember its sound level would be included in the map of + * received levels. + * + * @author Yana Stamcheva + */ +public class ConferenceMembersSoundLevelEvent + extends EventObject +{ + /** + * The maximum level that can be reported for a participant in a conference. + * Level values should be distributed among MAX_LEVEL and MIN_LEVEL in a + * way that would appear uniform to users. + */ + public static final int MAX_LEVEL = 255; + + /** + * The maximum (zero) level that can be reported for a participant in a + * conference. Level values should be distributed among MAX_LEVEL and + * MIN_LEVEL in a way that would appear uniform to users. + */ + public static final int MIN_LEVEL = 0; + + /** + * The mapping of ConferenceMembers to sound levels. It is + * presumed that all ConferenceMembers not contained in the map has + * a 0 sound level. + */ + private final Map levels; + + /** + * Creates an instance of ConferenceMembersSoundLevelEvent for the + * given callPeer by indicating the mapping of + * ConferenceMembers and sound levels. + * + * @param callPeer the CallPeer for which this event occurred + * @param levels the mapping of ConferenceMembers to sound levels + */ + public ConferenceMembersSoundLevelEvent( + CallPeer callPeer, + Map levels) + { + super(callPeer); + + this.levels = levels; + } + + /** + * Returns the source CallPeer for which the event occurred. + * @return the source CallPeer for which the event occurred + */ + public CallPeer getSourcePeer() + { + return (CallPeer) getSource(); + } + + /** + * Returns the mapping of ConferenceMembers to sound levels. It is + * presumed that all ConferenceMembers not contained in the map has + * a 0 sound level. + * @return the mapping of ConferenceMembers to sound levels + */ + public Map getLevels() + { + return levels; + } +} \ No newline at end of file diff --git a/src/net/java/sip/communicator/service/protocol/event/ConferenceMembersSoundLevelListener.java b/src/net/java/sip/communicator/service/protocol/event/ConferenceMembersSoundLevelListener.java new file mode 100644 index 000000000..bfceb0a03 --- /dev/null +++ b/src/net/java/sip/communicator/service/protocol/event/ConferenceMembersSoundLevelListener.java @@ -0,0 +1,29 @@ +/* + * 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.service.protocol.event; + +/** + * Notifies interested parties in ConferenceMembers sound level changes. + * When a CallPeer is participating in the conference also as a + * ConferenceMember its audio level would be included in the map of + * received levels. + * + * @author Yana Stamcheva + */ +public interface ConferenceMembersSoundLevelListener +{ + /** + * Indicates that a change has occurred in the sound level of some of the + * ConferenceMembers coming from a given CallPeer. It's + * presumed that all ConferenceMembers NOT contained in the event + * have a 0 sound level. + * + * @param event the ConferenceMembersSoundLevelEvent containing + * the new level + */ + public void soundLevelChanged(ConferenceMembersSoundLevelEvent event); +} diff --git a/src/net/java/sip/communicator/service/protocol/event/SoundLevelChangeEvent.java b/src/net/java/sip/communicator/service/protocol/event/SoundLevelChangeEvent.java index 040d196ec..cc4703e30 100644 --- a/src/net/java/sip/communicator/service/protocol/event/SoundLevelChangeEvent.java +++ b/src/net/java/sip/communicator/service/protocol/event/SoundLevelChangeEvent.java @@ -7,26 +7,25 @@ package net.java.sip.communicator.service.protocol.event; import java.util.*; +import net.java.sip.communicator.service.protocol.*; /** - * SoundLevelChangeEvents are distributed to - * SoundLevelChangeListener during calls and only by those - * which support the feature. A single event instance contains the new - * sound level values for one or more participants being mixed by the remote - * party. Every participant is represented by an SSRC String identifier - * which corresponds to the SSRC field that it is using when communicating with - * the mixer. If a certain SSRC identifier is reported in a particular - * SoundLevelChangeEvent and is not present in a following instance - * should be interpreted as a sound-level value of 0 for that participant. + * SoundLevelChangeEvents are triggered whenever a change occurs in the + * sound level of the audio stream coming from a certain CallPeer. *

- * Listeners should assume that the absence of sound level events indicates the - * absence of changes in the sound level of all known call participants. + * In the case of a CallPeer, which is also a conference focus and + * is participating in the conference as a ConferenceMember the level + * would be the aggregated level of all ConferenceMembers levels + * including the one corresponding to the peer itself. + *

+ * In the case of a CallPeer, which is also a conference focus, but + * is NOT participating in the conference as a ConferenceMember + * (server) the level would be the aggregated level of all attached + * ConferenceMembers. * - * @param type of the mappings to the levels, local ssrc which is Long - * or ConferenceMember when used for ConferenceMember listeners. - * @author Emil Ivov + * @author Yana Stamcheva */ -public class SoundLevelChangeEvent +public class SoundLevelChangeEvent extends EventObject { /** @@ -44,36 +43,31 @@ public class SoundLevelChangeEvent public static final int MIN_LEVEL = 0; /** - * The mapping of SSRC identifiers to sound levels or ConferenceMembers - * to sound levels. + * The audio stream level, for the change of which this event is about. */ - private final Map levels; + private final int level; /** - * Creates a new instance of a SoundLevelChangeEvent for the - * specified source stream and level mappings. + * Creates an StreamSoundLevelEvent for the given callPeer + * by indicating the current sound level of the audio stream. * - * @param source - * @param levels + * @param source the source from which the change is received + * @param level the current sound level of the audio stream */ public SoundLevelChangeEvent(Object source, - Map levels) + int level) { super(source); - this.levels = levels; + this.level = level; } /** - * Returns the mapping of SSRC identifiers to sound levels. The map contains - * the SSRC identifiers of all participants whose sound levels have changed - * to non-zero values. All known participants that are not reported in the - * map are assumed to have zero values of their levels. - * - * @return a mapping of SSRC identifiers to sound levels. + * Returns the current sound level of the audio stream. + * @return the current sound level of the audio stream */ - public Map getLevels() + public int getLevel() { - return levels; + return level; } } diff --git a/src/net/java/sip/communicator/service/protocol/event/SoundLevelListener.java b/src/net/java/sip/communicator/service/protocol/event/SoundLevelListener.java index c61910506..c48c0694e 100644 --- a/src/net/java/sip/communicator/service/protocol/event/SoundLevelListener.java +++ b/src/net/java/sip/communicator/service/protocol/event/SoundLevelListener.java @@ -9,23 +9,35 @@ import java.util.*; /** - * This listener allows interested parties to register for events notifying them - * that the sound level for a conference participant currently being mixed by - * our interlocutor has changed. + * Notifies interested parties in sound level changes of the main audio stream + * coming from a given CallPeer. + *

+ * What does this mean in the different cases: + * 1) In the case of a CallPeer, which is not a conference focus and + * has no ConferenceMembers we would be notified of any change in the + * sound level of the stream coming from this peer. + * 2) In the case of a CallPeer, which is also a conference focus and + * is participating in the conference as a ConferenceMember the level + * would be the aggregated level of all ConferenceMembers levels + * including the one corresponding to the peer itself. + * 3) In the case of a CallPeer, which is also a conference focus, but + * is NOT participating in the conference as a ConferenceMember + * (server) the level would be the aggregated level of all + * ConferenceMembers. * - * @param Long or ConferenceMember type mapping with sound levels. - * @author Emil Ivov + * @author Yana Stamcheva */ -public interface SoundLevelListener +public interface SoundLevelListener extends EventListener { - /** - * Delivers SoundLevelChangeEvents to the implementing class. These - * events may be delivered if the remote party is a mixer which supports - * the RTP sound levels extension. + /** + * Indicates that a change has occurred in the audio stream level coming + * from a given CallPeer. In the case of conference focus the audio + * stream level would be the total level including all + * ConferenceMembers levels. * - * @param evt the notification event containing the list of changes. + * @param event the StreamSoundLevelEvent containing the new level */ - public void soundLevelChanged(SoundLevelChangeEvent evt); + public void soundLevelChanged(SoundLevelChangeEvent event); }