aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/service/protocol
diff options
context:
space:
mode:
authorDamian Minkov <damencho@jitsi.org>2011-05-25 15:56:55 +0000
committerDamian Minkov <damencho@jitsi.org>2011-05-25 15:56:55 +0000
commit8e9072c8fae933e4ecd8c36bb2d7b55e25d78479 (patch)
tree53a37895d174563e3a2380140855f53bcad09c63 /src/net/java/sip/communicator/service/protocol
parent0abf389e39a9087bff3e3af5f6dd5d948b55d7c3 (diff)
downloadjitsi-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.java77
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>