Add silencing

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
pull/21833/head
Šimon Brandner 2021-05-22 20:24:36 +02:00
parent c678211a42
commit b08b36c14f
No known key found for this signature in database
GPG Key ID: 9760693FDD98A790
1 changed files with 24 additions and 1 deletions

View File

@ -21,17 +21,20 @@ import {MatrixClientPeg} from '../../../MatrixClientPeg';
import dis from '../../../dispatcher/dispatcher'; import dis from '../../../dispatcher/dispatcher';
import { _t } from '../../../languageHandler'; import { _t } from '../../../languageHandler';
import { ActionPayload } from '../../../dispatcher/payloads'; import { ActionPayload } from '../../../dispatcher/payloads';
import CallHandler from '../../../CallHandler'; import CallHandler, { AudioID } from '../../../CallHandler';
import RoomAvatar from '../avatars/RoomAvatar'; import RoomAvatar from '../avatars/RoomAvatar';
import FormButton from '../elements/FormButton'; import FormButton from '../elements/FormButton';
import { CallState } from 'matrix-js-sdk/src/webrtc/call'; import { CallState } from 'matrix-js-sdk/src/webrtc/call';
import {replaceableComponent} from "../../../utils/replaceableComponent"; import {replaceableComponent} from "../../../utils/replaceableComponent";
import AccessibleTooltipButton from '../elements/AccessibleTooltipButton';
import classNames from 'classnames';
interface IProps { interface IProps {
} }
interface IState { interface IState {
incomingCall: any; incomingCall: any;
silenced: boolean;
} }
@replaceableComponent("views.voip.IncomingCallBox") @replaceableComponent("views.voip.IncomingCallBox")
@ -44,6 +47,7 @@ export default class IncomingCallBox extends React.Component<IProps, IState> {
this.dispatcherRef = dis.register(this.onAction); this.dispatcherRef = dis.register(this.onAction);
this.state = { this.state = {
incomingCall: null, incomingCall: null,
silenced: false,
}; };
} }
@ -58,6 +62,7 @@ export default class IncomingCallBox extends React.Component<IProps, IState> {
if (call && call.state === CallState.Ringing) { if (call && call.state === CallState.Ringing) {
this.setState({ this.setState({
incomingCall: call, incomingCall: call,
silenced: false, // Reset silenced state for new call
}); });
} else { } else {
this.setState({ this.setState({
@ -84,6 +89,13 @@ export default class IncomingCallBox extends React.Component<IProps, IState> {
}); });
}; };
private onSilenceClick: React.MouseEventHandler = (e) => {
e.stopPropagation();
const newState = !this.state.silenced
this.setState({silenced: newState});
newState ? CallHandler.sharedInstance().pause(AudioID.Ring) : CallHandler.sharedInstance().play(AudioID.Ring);
}
public render() { public render() {
if (!this.state.incomingCall) { if (!this.state.incomingCall) {
return null; return null;
@ -107,6 +119,12 @@ export default class IncomingCallBox extends React.Component<IProps, IState> {
} }
} }
const silenceClass = classNames({
"mx_IncomingCallBox_iconButton": true,
"mx_IncomingCallBox_unSilence": this.state.silenced,
"mx_IncomingCallBox_silence": !this.state.silenced,
});
return <div className="mx_IncomingCallBox"> return <div className="mx_IncomingCallBox">
<div className="mx_IncomingCallBox_CallerInfo"> <div className="mx_IncomingCallBox_CallerInfo">
<RoomAvatar <RoomAvatar
@ -118,6 +136,11 @@ export default class IncomingCallBox extends React.Component<IProps, IState> {
<h1>{caller}</h1> <h1>{caller}</h1>
<p>{incomingCallText}</p> <p>{incomingCallText}</p>
</div> </div>
<AccessibleTooltipButton
className={silenceClass}
onClick={this.onSilenceClick}
title={this.state.silenced ? _t("Sound on"): _t("Silence call")}
/>
</div> </div>
<div className="mx_IncomingCallBox_buttons"> <div className="mx_IncomingCallBox_buttons">
<FormButton <FormButton