element-hq / element-hq/element-web

VoIP/Call UX/UI proposal

Open
#16,110 0 comments 5 reactions 0 assignees View on GitHub
A-VoIP T-Enhancement X-Needs-Design
Dominant language
TypeScript
Stars
13.5k
Forks
2.8k
PR merge metrics
PR metrics pending

Description

## Introduction

Over the last few days, I've been thinking about what I wrote down in #16084. I’ve got a little bored and this is how it has ended up. I am aware that there may already be a plan from the dev team. But I thought I'd share my thoughts anyway.

My design aims to be as simple as possible without sacrificing any functionality. I think the UX/UI I propose really starts to be useful with more than two feeds. So if Matrix-native group calls aren't going to be implemented, maybe a different UX/UI, should be considered. But if the ability to have multiple outgoing streams would be added (webcam and screen sharing), I think this would also be a great solution. The UX/UI I came up with is very similar to what Discord currently has.

## Basics

The `callView` should be resizable, and there should be a button to expand it to its full height.

If no feed is coming from a user, we use their profile picture as a replacement.

I suggest we introduce the following variables: `focusedFeed` and `pinnedFeeds`. The description of how we set these variables is in the behaviour section.

## Views

We introduce three views a `focusedView`, a `gridView` and a `pinnedView`. The following table shows which view we present to the user based on variable values.

|View |Condition |
|-------------|-----------------------------------------|
|`gridView` |`!focusedFeed && pinnedFeeds.length == 0`|
|`focusedView`|`focusedFeed != undefined` |
|`pinnedView` |`!focusedFeed && pinnedFeeds.length > 0` |

### `gridView`

The `gridView` is what you know from many apps (zoom for example). It shows *all* the feeds in a grid.

### `focusedView`

The `focusedView` presents the user with the `focusedFeed` and a `sidebar` with the rest of the feeds. It should be possible to scroll, resize, hide and possibly reorder the `sidebar`.

### `pinnedView`

The `pinnedView` has a `gridView` with all the feeds listed in `pinnedFeeds`. And it has a `sidebar` with the remaining feeds.

## Behaviour

### On feed click

All feeds should be clickable. If the user clicks on the `focusedFeed`, we set the `focusedFeed` to `undefined`. If the user clicks any other feed, we set the `focusedFeed` to that feed.

### On join

In 1:1 calls we set the `focusedFeed` to the remote webcam feed. In group calls, we set the `focusedFeed` to `undefined`.

### On user started screen sharing

We set the `focusedFeed` to the incoming screen sharing feed. There should be the possibility to turn this behaviour off in the settings.

## The rest

There are some other things I haven't mentioned here (autofocusing, for example). That is because these things aren't dependent on the basic design.

## Endnotes

Please leave some feedback!

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.