@@ -45,6 +45,7 @@ interface IProps {
4545interface IState {
4646 audioMuted : boolean ;
4747 videoMuted : boolean ;
48+ speaking : boolean ;
4849}
4950
5051@replaceableComponent ( "views.voip.VideoFeed" )
@@ -57,6 +58,7 @@ export default class VideoFeed extends React.PureComponent<IProps, IState> {
5758 this . state = {
5859 audioMuted : this . props . feed . isAudioMuted ( ) ,
5960 videoMuted : this . props . feed . isVideoMuted ( ) ,
61+ speaking : false ,
6062 } ;
6163 }
6264
@@ -103,11 +105,19 @@ export default class VideoFeed extends React.PureComponent<IProps, IState> {
103105 if ( oldFeed ) {
104106 this . props . feed . removeListener ( CallFeedEvent . NewStream , this . onNewStream ) ;
105107 this . props . feed . removeListener ( CallFeedEvent . MuteStateChanged , this . onMuteStateChanged ) ;
108+ if ( this . props . feed . purpose === SDPStreamMetadataPurpose . Usermedia ) {
109+ this . props . feed . removeListener ( CallFeedEvent . Speaking , this . onSpeaking ) ;
110+ this . props . feed . measureVolumeActivity ( false ) ;
111+ }
106112 this . stopMedia ( ) ;
107113 }
108114 if ( newFeed ) {
109115 this . props . feed . addListener ( CallFeedEvent . NewStream , this . onNewStream ) ;
110116 this . props . feed . addListener ( CallFeedEvent . MuteStateChanged , this . onMuteStateChanged ) ;
117+ if ( this . props . feed . purpose === SDPStreamMetadataPurpose . Usermedia ) {
118+ this . props . feed . addListener ( CallFeedEvent . Speaking , this . onSpeaking ) ;
119+ this . props . feed . measureVolumeActivity ( true ) ;
120+ }
111121 this . playMedia ( ) ;
112122 }
113123 }
@@ -162,6 +172,10 @@ export default class VideoFeed extends React.PureComponent<IProps, IState> {
162172 } ) ;
163173 } ;
164174
175+ private onSpeaking = ( speaking : boolean ) : void => {
176+ this . setState ( { speaking } ) ;
177+ } ;
178+
165179 private onResize = ( e ) => {
166180 if ( this . props . onResize && ! this . props . feed . isLocal ( ) ) {
167181 this . props . onResize ( e ) ;
@@ -173,6 +187,7 @@ export default class VideoFeed extends React.PureComponent<IProps, IState> {
173187
174188 const wrapperClasses = classnames ( "mx_VideoFeed" , {
175189 mx_VideoFeed_voice : this . state . videoMuted ,
190+ mx_VideoFeed_speaking : this . state . speaking ,
176191 } ) ;
177192 const micIconClasses = classnames ( "mx_VideoFeed_mic" , {
178193 mx_VideoFeed_mic_muted : this . state . audioMuted ,
0 commit comments