Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Merge pull request #6472 from SimonBrandner/fix/call-view/18221
Browse files Browse the repository at this point in the history
  • Loading branch information
germain-gg authored Jul 28, 2021
2 parents 2a55778 + 6f77d3b commit 771dda0
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 42 deletions.
12 changes: 9 additions & 3 deletions res/css/views/voip/_CallView.scss
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ limitations under the License.
max-width: 240px;
}

.mx_CallView_header_phoneIcon {
.mx_CallView_header_callTypeIcon {
display: inline-block;
margin-right: 6px;
height: 16px;
Expand All @@ -293,20 +293,26 @@ limitations under the License.

height: 16px;
width: 16px;
background-color: $warning-color;
background-color: $secondary-fg-color;
mask-repeat: no-repeat;
mask-size: contain;
mask-position: center;
}

&.mx_CallView_header_callTypeIcon_voice::before {
mask-image: url('$(res)/img/element-icons/call/voice-call.svg');
}

&.mx_CallView_header_callTypeIcon_video::before {
mask-image: url('$(res)/img/element-icons/call/video-call.svg');
}
}

.mx_CallView_callControls {
position: absolute;
display: flex;
justify-content: center;
bottom: 5px;
width: 100%;
opacity: 1;
transition: opacity 0.5s;
z-index: 200; // To be above _all_ feeds
Expand Down
73 changes: 34 additions & 39 deletions src/components/views/voip/CallView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ interface IState {
screensharing: boolean;
callState: CallState;
controlsVisible: boolean;
hoveringControls: boolean;
showMoreMenu: boolean;
showDialpad: boolean;
primaryFeed: CallFeed;
Expand Down Expand Up @@ -102,7 +103,7 @@ function exitFullscreen() {
if (exitMethod) exitMethod.call(document);
}

const CONTROLS_HIDE_DELAY = 1000;
const CONTROLS_HIDE_DELAY = 2000;
// Height of the header duplicated from CSS because we need to subtract it from our max
// height to get the max height of the video
const CONTEXT_MENU_VPADDING = 8; // How far the context menu sits above the button (px)
Expand All @@ -128,6 +129,7 @@ export default class CallView extends React.Component<IProps, IState> {
screensharing: this.props.call.isScreensharing(),
callState: this.props.call.state,
controlsVisible: true,
hoveringControls: false,
showMoreMenu: false,
showDialpad: false,
primaryFeed: primary,
Expand Down Expand Up @@ -244,6 +246,7 @@ export default class CallView extends React.Component<IProps, IState> {
};

private onControlsHideTimer = () => {
if (this.state.hoveringControls || this.state.showDialpad || this.state.showMoreMenu) return;
this.controlsHideTimer = null;
this.setState({
controlsVisible: false,
Expand Down Expand Up @@ -293,24 +296,10 @@ export default class CallView extends React.Component<IProps, IState> {

private onDialpadClick = (): void => {
if (!this.state.showDialpad) {
if (this.controlsHideTimer) {
clearTimeout(this.controlsHideTimer);
this.controlsHideTimer = null;
}

this.setState({
showDialpad: true,
controlsVisible: true,
});
this.setState({ showDialpad: true });
this.showControls();
} else {
if (this.controlsHideTimer !== null) {
clearTimeout(this.controlsHideTimer);
}
this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY);

this.setState({
showDialpad: false,
});
this.setState({ showDialpad: false });
}
};

Expand Down Expand Up @@ -345,29 +334,16 @@ export default class CallView extends React.Component<IProps, IState> {
};

private onMoreClick = (): void => {
if (this.controlsHideTimer) {
clearTimeout(this.controlsHideTimer);
this.controlsHideTimer = null;
}

this.setState({
showMoreMenu: true,
controlsVisible: true,
});
this.setState({ showMoreMenu: true });
this.showControls();
};

private closeDialpad = (): void => {
this.setState({
showDialpad: false,
});
this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY);
this.setState({ showDialpad: false });
};

private closeContextMenu = (): void => {
this.setState({
showMoreMenu: false,
});
this.controlsHideTimer = window.setTimeout(this.onControlsHideTimer, CONTROLS_HIDE_DELAY);
this.setState({ showMoreMenu: false });
};

// we register global shortcuts here, they *must not conflict* with local shortcuts elsewhere or both will fire
Expand Down Expand Up @@ -403,6 +379,15 @@ export default class CallView extends React.Component<IProps, IState> {
}
};

private onCallControlsMouseEnter = (): void => {
this.setState({ hoveringControls: true });
this.showControls();
};

private onCallControlsMouseLeave = (): void => {
this.setState({ hoveringControls: false });
};

private onRoomAvatarClick = (): void => {
const userFacingRoomId = CallHandler.sharedInstance().roomIdForCall(this.props.call);
dis.dispatch({
Expand Down Expand Up @@ -537,8 +522,6 @@ export default class CallView extends React.Component<IProps, IState> {
}

// The dial pad & 'more' button actions are only relevant in a connected call
// When not connected, we have to put something there to make the flexbox alignment correct
let dialpadButton;
let contextMenuButton;
if (this.state.callState === CallState.Connected) {
contextMenuButton = (
Expand All @@ -549,6 +532,9 @@ export default class CallView extends React.Component<IProps, IState> {
isExpanded={this.state.showMoreMenu}
/>
);
}
let dialpadButton;
if (this.state.callState === CallState.Connected && this.props.call.opponentSupportsDTMF()) {
dialpadButton = (
<ContextMenuButton
className="mx_CallView_callControls_button mx_CallView_callControls_dialpad"
Expand All @@ -560,7 +546,11 @@ export default class CallView extends React.Component<IProps, IState> {
}

return (
<div className={callControlsClasses}>
<div
className={callControlsClasses}
onMouseEnter={this.onCallControlsMouseEnter}
onMouseLeave={this.onCallControlsMouseLeave}
>
{ dialpadButton }
<AccessibleButton
className={micClasses}
Expand Down Expand Up @@ -821,10 +811,15 @@ export default class CallView extends React.Component<IProps, IState> {
{ expandButton }
</div>;

const callTypeIconClassName = classNames("mx_CallView_header_callTypeIcon", {
"mx_CallView_header_callTypeIcon_voice": !isVideoCall,
"mx_CallView_header_callTypeIcon_video": isVideoCall,
});

let header: React.ReactNode;
if (!this.props.pipMode) {
header = <div className="mx_CallView_header">
<div className="mx_CallView_header_phoneIcon" />
<div className={callTypeIconClassName} />
<span className="mx_CallView_header_callType">{ callTypeText }</span>
{ headerControls }
</div>;
Expand Down

0 comments on commit 771dda0

Please sign in to comment.