diff options
author | Damian Minkov <damencho@jitsi.org> | 2011-05-25 15:56:55 +0000 |
---|---|---|
committer | Damian Minkov <damencho@jitsi.org> | 2011-05-25 15:56:55 +0000 |
commit | 8e9072c8fae933e4ecd8c36bb2d7b55e25d78479 (patch) | |
tree | 53a37895d174563e3a2380140855f53bcad09c63 /src/net/java/sip/communicator/service/protocol | |
parent | 0abf389e39a9087bff3e3af5f6dd5d948b55d7c3 (diff) | |
download | jitsi-8e9072c8fae933e4ecd8c36bb2d7b55e25d78479.zip jitsi-8e9072c8fae933e4ecd8c36bb2d7b55e25d78479.tar.gz jitsi-8e9072c8fae933e4ecd8c36bb2d7b55e25d78479.tar.bz2 |
Update recorder when we mute mute/unmute a call peer.
Diffstat (limited to 'src/net/java/sip/communicator/service/protocol')
-rw-r--r-- | src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java | 77 |
1 files changed, 75 insertions, 2 deletions
diff --git a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java index d3b1261..26a6980 100644 --- a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java +++ b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java @@ -624,16 +624,58 @@ public abstract class MediaAwareCall< if (recorder != null) { + // listens for mute event to update recorder + final PropertyChangeListener muteListener + = new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + if(evt.getPropertyName() + .equals(CallPeer.MUTE_PROPERTY_NAME)) + { + updateRecorderMuteState(recorder); + } + } + }; + // Make sure the recorder is stopped when this call ends. final CallChangeListener callChangeListener - = new CallChangeAdapter() + = new CallChangeListener() { - @Override + /** + * When call ends we stop recording. + * @param evt the <tt>CallChangeEvent</tt> instance + * containing the source + */ public void callStateChanged(CallChangeEvent evt) { if (CallState.CALL_ENDED.equals(evt.getNewValue())) recorder.stop(); } + + /** + * We listen for mute on newly added call peers. + * @param evt the <tt>CallPeerEvent</tt> containing + * the source call + */ + public void callPeerAdded(CallPeerEvent evt) + { + updateRecorderMuteState(recorder); + evt.getSourceCallPeer() + .addPropertyChangeListener(muteListener); + } + + /** + * We stop listen for mute on removed call peers. + * @param evt the <tt>CallPeerEvent</tt> containing + * the source call + */ + public void callPeerRemoved(CallPeerEvent evt) + { + updateRecorderMuteState(recorder); + evt.getSourceCallPeer() + .removePropertyChangeListener(muteListener); + } }; addCallChangeListener(callChangeListener); @@ -651,11 +693,42 @@ public abstract class MediaAwareCall< removeCallChangeListener(callChangeListener); } }); + + // add listener for mute event to all current peers + Iterator<T> iter = getCallPeers(); + while(iter.hasNext()) + { + iter.next().addPropertyChangeListener(muteListener); + } + + updateRecorderMuteState(recorder); } return recorder; } /** + * Updates the recorder mute state by looking at the peers state. + * If one of the peers is not muted and the recorder is not. + * If all the peers are muted so must be and the recorder. + * @param recorder the recorder we are operating on. + */ + private void updateRecorderMuteState(Recorder recorder) + { + Iterator<T> iter = getCallPeers(); + while(iter.hasNext()) + { + if(!iter.next().isMute()) + { + // one peer is not muted so we unmute. + recorder.setMute(true); + return; + } + } + // all peers are muted, so we mute the recorder + recorder.setMute(true); + } + + /** * Set the <tt>MediaDevice</tt> used for the video. * * @param dev video <tt>MediaDevice</tt> |