Commit Graph

2031 Commits

Author SHA1 Message Date
Timo
f53ea75c94
Add DeviceMute widget action io.element.device_mute. (#2482)
* Add DeviceMute widget action `io.element.device_mute`.
This allows to send mute requests ("toWidget") and get the current mute state as a response.
And it will update the client about each change of mute states.

* review + better explanation

* review

* add comments

* use `useCallback`
2024-07-30 13:30:33 +02:00
Robin
2b67a9cfbe
Merge pull request #2486 from robintown/delete-fullscreen
Delete the unused full screen code
2024-07-29 09:28:07 -04:00
Robin
a3ce333352
Only show the expand button in spotlight layout (#2510)
It has no effect in any layout other than spotlight, and we've decided to hide it rather than spending effort to make it do something.
2024-07-26 12:57:49 +02:00
Robin
d5faa5ea90
Don't show the speaker in the spotlight in large grids (#2511)
We've concluded that this behavior is actually more distracting than it is helpful, and we want to try out what it's like to just have the importance ordering and visual cues help you find who's speaking.
2024-07-26 12:51:34 +02:00
Robin
5becd2e175
Fix a crash when using the duplicate tiles option (#2512) 2024-07-26 12:51:09 +02:00
Robin
3b38a5322c
Give tiles a minimum area rather than a minimum width and height (#2513)
This seems to result in more sensible cropping and allocation of space across the board, in my testing.
2024-07-26 12:50:44 +02:00
Robin
d062871f41
Don't consider microphone mute state in importance ordering (#2515)
We're finding that if we reorder participants based on whether their mic is muted, this just creates a lot of distracting layout shifts. People who speak are automatically promoted into the speaker category, so there's little value in additionally caring about mute state.
2024-07-26 11:27:22 +02:00
Robin
12e233970c Import Compound icons in the new recommended way
The Compound design tokens package is now set up to generate React components for every icon, so we no longer need to use our more error-prone method of importing the SVGs.
2024-07-25 13:15:45 -04:00
Robin
10b915c707
Merge pull request #2501 from robintown/layout-reactivity
Make layout reactivity less brittle
2024-07-25 12:51:39 -04:00
Robin
5544695f21 Use clearer names 2024-07-25 12:50:28 -04:00
Timo
72de8e066c
fix grammar (#2506) 2024-07-25 14:33:37 +02:00
Robin
63afda05bc
Merge pull request #2502 from robintown/shortcut-a11y
Improve accessibility of keyboard shortcuts
2024-07-25 08:24:13 -04:00
Timo
b05c4234b7
Remove hide header condition (#2493) 2024-07-25 11:32:05 +02:00
Robin
380f49fccc Improve accessibility of keyboard shortcuts
Ensure that they don't interfere with say, using spacebar to press a button, and also ensure that they won't do surprising things like scroll the page at the same time.
2024-07-24 18:42:21 -04:00
Robin
447bac3280 Make layout reactivity less brittle
Follow-up to ea2d98179c

This took a couple of iterations to find something that works without creating update loops, but I think that by automatically informing Grid whenever a layout component is re-rendered, we'll have a much easier time ensuring that our layouts are fully reactive.
2024-07-24 17:03:27 -04:00
Robin
ea2d98179c Quick and dirty fix to spotlight reactivity 2024-07-22 10:52:20 -04:00
Robin
4173fd113b
Merge pull request #2485 from element-hq/new-call-layouts
New call layouts
2024-07-19 09:08:51 -04:00
Timo
afee9eaa26
Don't update mute when reaching the user count threshold. (#2474)
* Dont update mute during call.
2024-07-18 18:14:29 +02:00
Robin
364b78abda Delete the unused full screen code
We no longer allow individual tiles to be put in full screen, because we're seeing what it's like to just stretch the spotlight tile edge-to-edge and keep the margins minimal.
2024-07-18 11:48:06 -04:00
Robin
507b1fc52d Merge branch 'livekit' into new-call-layouts 2024-07-18 11:38:35 -04:00
Robin
377b7ff5de Explain each layout 2024-07-18 11:33:20 -04:00
Robin
4955535374 Use more consistent names for layout types 2024-07-18 11:24:18 -04:00
Robin
0664f978e3 Merge branch 'new-call-layouts' into rest-of-the-layouts 2024-07-18 11:21:56 -04:00
Robin
7526826b0c Improve aspect ratios on mobile 2024-07-18 11:01:21 -04:00
Robin
b4e0df75c0 Merge branch 'new-call-layouts' into one-on-one-layout 2024-07-18 10:28:17 -04:00
Robin
d561a41666
Merge pull request #2416 from robintown/grid-spotlight-speaker
Show speaker in the spotlight in large grids
2024-07-18 10:17:31 -04:00
Robin
e04affe93e Justify the use of a participant count threshold 2024-07-18 10:00:26 -04:00
Robin
7fcd7125c1 Merge branch 'new-call-layouts' into spotlight-layout 2024-07-18 08:48:50 -04:00
Robin
1efa594430 Use Array.some where it's appropriate 2024-07-17 16:06:48 -04:00
Robin
0a8c6c1454 Merge branch 'new-call-layouts' into observable-hooks 2024-07-17 15:55:50 -04:00
Robin
d4a2617f7b
Merge pull request #2380 from robintown/pin-always-show
Add toggle to always show yourself
2024-07-17 15:45:29 -04:00
Robin
2bc56dbff2 Use fewer ML-style variable names 2024-07-17 15:40:02 -04:00
Robin
a59875dab5 Explain what each sorting bin means 2024-07-17 15:37:41 -04:00
renovate[bot]
e79cded57f
Update all non-major dependencies (#2479)
* Update all non-major dependencies

* prettier fixes

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Timo <toger5@hotmail.de>
2024-07-17 10:07:26 +02:00
Robin
2440037639 Implement most of the remaining layout changes
Includes the mobile UX optimizations and the tweaks we've made to cut down on wasted space, but does not yet include the change to embed the spotlight tile within the grid.
2024-07-12 15:50:17 -04:00
Robin
a16f235277 Fix crash in spotlight mode while connecting
Because we were hiding even the local participant during initial connection, there would be no participants, and therefore nothing to put in the spotlight. The designs don't really tell us what the connecting state should look like, so I've taken the liberty of restoring it to its former glory of showing the local participant immediately.
2024-07-12 15:49:45 -04:00
Robin
45c89a2298 Delete the legacy grid system 2024-07-12 15:49:43 -04:00
Robin
7979493371 Implement the new one-on-one layout 2024-07-12 15:47:56 -04:00
Robin
e0b10d89b5 Add model for one-on-one layout 2024-07-12 15:47:56 -04:00
Robin
183d2d9050 Show speaker in the spotlight in large grids 2024-07-12 15:47:35 -04:00
Robin
12b719da95 Make layout reactivity a little more fine-grained 2024-07-12 15:47:00 -04:00
Robin
dfda7539d6 Only switch to spotlight for remote screen shares 2024-07-12 15:47:00 -04:00
Robin
7f40ce8dde Fix advance buttons showing up for the spotlight speaker 2024-07-12 15:47:00 -04:00
Robin
ec1b020d4e Add indicators to spotlight tile and make spotlight layout responsive 2024-07-12 15:47:00 -04:00
Robin
54c22f4ab2 Clean up spotlight tile code 2024-07-12 15:47:00 -04:00
Robin
ffbbc74a96 Implement the new spotlight layout 2024-07-12 15:47:00 -04:00
Robin
34c45cb5e2 Get the right grid offset even when offsetParent is a layout element 2024-07-12 15:47:00 -04:00
Robin
af0bd795b5 Replace react-rxjs with observable-hooks
react-rxjs is the library we've been using to connect our React components to view models and consume observables. However, after spending some time with react-rxjs, I feel that it's a very heavy-handed solution. It requires us to sprinkle <Subscribe /> and <RemoveSubscribe /> components all throughout the code, and makes React go through an extra render cycle whenever we mount a component that binds to a view model. What I really want is a lightweight React hook that just gets the current value out of a plain observable, without any extra setup. Luckily the observable-hooks library with its useObservableEagerState hook seems to do just that—and it's more actively maintained, too!
2024-07-12 15:46:33 -04:00
Robin
0d485ef97f Use always show flag in importance ordering 2024-07-12 15:43:24 -04:00
Robin
5647619b36 Add always show toggle to the UI 2024-07-12 15:43:24 -04:00
Robin
8a414012a0 Add always show flag to view model 2024-07-12 15:43:24 -04:00
Robin
e33fbd77d1 Split local and remote user media into different classes 2024-07-12 15:43:24 -04:00
Robin
fdc6d4a1b6 Add a developer option to duplicate tiles
This is useful for testing how the UI behaves with different numbers of participants.
2024-07-12 14:55:29 -04:00
Robin
a534356dd9
Merge pull request #2368 from robintown/settings-refactor
Refactor settings to use observables
2024-07-12 14:50:46 -04:00
Robin
599d6fd007 Address review feedback 2024-07-12 14:15:27 -04:00
Robin
14fc1481f3 Address some review feedback 2024-07-12 14:01:32 -04:00
Andrew Ferrazzutti
34c7d02de2
Add config to send session membership state events (#2460)
If not set, legacy call membership state events are sent instead.
Even if set, legacy events are sent in rooms with active legacy calls.

---------

Co-authored-by: Timo <16718859+toger5@users.noreply.github.com>
2024-07-05 21:10:16 +09:00
Andrew Ferrazzutti
ca45067158
Let Element Call widget set session memberships (#2459)
Make Element Call widgets request permission to set device-specific
session membership state events.
2024-07-05 04:59:48 +09:00
Andrew Ferrazzutti
5a6eb7c573
Make widgets request the room creation event (#2457)
This allows the widget to check the room version, so it can know about
version-specific auth rules (namely MSC3779).
2024-07-05 04:57:45 +09:00
Robin
41083c0f9e Refactor settings to use observables
Also removing some unused settings along the way.
2024-07-03 15:29:32 -04:00
Robin
20602c122b Implement the new unified grid layout
Here I've implemented an MVP for the new unified grid layout, which scales smoothly up to arbitrarily many participants. It doesn't yet have a special 1:1 layout, so in spotlight mode and 1:1s, we will still fall back to the legacy grid systems.

Things that happened along the way:
- The part of VideoTile that is common to both spotlight and grid tiles, I refactored into MediaView
- VideoTile renamed to GridTile
- Added SpotlightTile for the new, glassy spotlight designs
- NewVideoGrid renamed to Grid, and refactored to be even more generic
- I extracted the media name logic into a custom React hook
- Deleted the BigGrid experiment
2024-07-03 15:29:08 -04:00
Timo
d27f433175
Skip error screen for the issue, that the homeserver does not support the room summary endpoint. (#2453)
* Add try inner try block to the room summary fetching and only throw after fetching and a "blind join" fails.
(blind join: call room.join without knowing if the room is public)

Co-authored-by: Robin <robin@robin.town>

---------

Co-authored-by: Robin <robin@robin.town>
2024-06-25 08:44:02 +00:00
Robin
4db7c2bc68 Fix type errors 2024-06-24 10:31:50 -04:00
Robin
591833505f Adapt to breaking changes 2024-06-21 10:23:30 -04:00
Robin
f9ef037cea
Merge pull request #2435 from element-hq/hughns/visibilitychange
Use correct DOM event name for visibility changes in useWakeLock
2024-06-20 10:19:05 -04:00
Hugh Nimmo-Smith
ba647780e8 Use correct DOM event name for visibility changes in useWakeLock 2024-06-19 17:54:15 +01:00
Timo
812ae2ce89
Load focus information from well known and use client config only as a fallback. (#2358)
* Load focus information from well known and use client config only as a fallback.

Signed-off-by: Timo K <toger5@hotmail.de>
Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
2024-06-19 16:41:52 +02:00
Timo
0ed7853958
Remove EventType.GroupCallPrefix from widget capabilities (#2399)
Its not used anymore.
2024-06-17 20:04:49 +02:00
Robin
bd7209cd40
Merge pull request #2250 from element-hq/renovate/typescript-eslint-monorepo
Update typescript-eslint monorepo to v7.12.0
2024-06-04 11:21:59 -04:00
Robin
70fdc68b13 Fix lints 2024-06-04 11:20:25 -04:00
Robin
0aeb68b445 Reduce footer space while preserving visual balance 2024-06-04 10:05:21 -04:00
Marcel Ackermann
6b6ad16306
remove excessive footer space 2024-06-01 13:10:15 +02:00
Robin
b9b53ec251 Update participant count color
It has changed in recent designs.
2024-05-30 21:36:50 -04:00
Andrew Ferrazzutti
c405b61c66
Wait for a full sync on startup (#2372)
This avoids missing any state not included in the latest cached sync.
2024-05-23 01:00:17 +09:00
Andrew Ferrazzutti
8718a7139b
Don't auto-join knock room on invite after leave (#2362)
If you send a knock that is rejected, or your knock is accepted and you
are later removed from the room, do not automatically accept subsequent
invites to that room.

Note that the auto-join behaviour happened only if the page was not
refreshed after sending a knock.
2024-05-07 16:58:30 +09:00
Andrew Ferrazzutti
94f267b93e
Add more valid rooms to the recents list (#2361)
Include:
- all rooms you are a member of
- knock rooms you've knocked on and are waiting for an invite to
- knock rooms you've been invited to in response to a knock
2024-05-07 16:57:53 +09:00
Andrew Ferrazzutti
56312b2753
Join knock rooms on page load if already invited (#2355)
When visiting the page for a knock room you are already invited to, join
it right away instead of offering to knock (which will fail as long as
you remain invited to the room).
2024-05-04 01:37:58 +09:00
Robin
e9c98a02f0 Respond to suggestions from code review 2024-05-02 16:32:48 -04:00
Robin
dcb4d10afb Remove unnecessary Tile indirection 2024-05-02 16:00:05 -04:00
Robin
705f9daf5f Fix speaking data taking 10 seconds to be available 2024-05-02 15:59:40 -04:00
Robin
c5e60744a2 Merge branch 'livekit' into layout-state 2024-05-02 15:35:45 -04:00
Timo
3670c36fac
Fix audio/video device flickering (#2353)
* Make onError a `useCallback`

Signed-off-by: Timo K <toger5@hotmail.de>
Co-authored-by: Robin <robin@robin.town>
2024-05-02 17:28:36 +02:00
Timo
51926cad3d
Revert "Fix mute flickering. (#2350)" (#2351)
This reverts commit 2ab909fab1.
2024-04-30 20:08:39 +02:00
Timo
2ab909fab1
Fix mute flickering. (#2350)
Use `useMeme` to not change the parameters that are used to call usePreviewDevice.

Signed-off-by: Timo K <toger5@hotmail.de>
2024-04-30 19:57:36 +02:00
Timo
5284479ece
Knocking support (#2281)
* Add joining with knock room creation flow.

Also add `WaitForInviteView` after knocking.
And appropriate error views when knock failed or gets rejected.

Signed-off-by: Timo K <toger5@hotmail.de>

* Refactor encryption information.

We had lots of enums and booleans to describe the encryption situation.
Now we only use the `EncryptionSystem` "enum" which contains the
additional information like sharedKey. (and we don't use the isRoomE2EE
function that is somewhat confusing since it checks `return widget ===
null && !room.getCanonicalAlias();` which is only indirectly related to
e2ee)

Signed-off-by: Timo K <toger5@hotmail.de>

* Update recent list.

- Don't use deprecated `groupCallEventHander` anymore (it used the old
  `m.call` state event.)
- make the recent list reactive (getting removed from a call removes the
  item from the list)
- support having rooms without shared secret but actual matrix
  encryption in the recent list
- change the share link creation button so that we create a link with
  pwd for sharedKey rooms and with `perParticipantE2EE=true` for matrix
  encrypted rooms.

Signed-off-by: Timo K <toger5@hotmail.de>

* fix types

Signed-off-by: Timo K <toger5@hotmail.de>

* patch js-sdk for linter

Signed-off-by: Timo K <toger5@hotmail.de>

* ignore ts expect error

Signed-off-by: Timo K <toger5@hotmail.de>

* Fix error in widget mode.

We cannot call client.getRoomSummary in widget mode. The code path needs
to throw before reaching this call. (In general we should never call
getRoomSummary if getRoom returns a room)

Signed-off-by: Timo K <toger5@hotmail.de>

* tempDemo

Signed-off-by: Timo K <toger5@hotmail.de>

* remove wait for invite view

Signed-off-by: Timo K <toger5@hotmail.de>

* yarn i18n

Signed-off-by: Timo K <toger5@hotmail.de>

* reset back mute participant count

* add logic to show error view when getting removed

* include reason whenever someone gets removed from a call.

* fix activeRoom not beeing early enough

* fix lints

* add comment about encryption situation

Signed-off-by: Timo K <toger5@hotmail.de>

* Fix lockfile

* Use (unmerged!) RoomSummary type from the js-sdk

Temporarily change the js-sdk dependency to the PR branch that provides
that type

* review

Signed-off-by: Timo K <toger5@hotmail.de>

* review (remove participant count unknown)

Signed-off-by: Timo K <toger5@hotmail.de>

* remove error for unencrypted calls (allow intentional unencrypted calls)

Signed-off-by: Timo K <toger5@hotmail.de>

* update js-sdk

Signed-off-by: Timo K <toger5@hotmail.de>

---------

Signed-off-by: Timo K <toger5@hotmail.de>
Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
2024-04-23 22:15:13 +09:00
Robin
bfb26ca500 Merge branch 'livekit' into layout-state 2024-04-19 13:28:30 -04:00
Robin
257211e8f9 Try disabling LiveKit web audio support
We think there's a chance this is causing some Edge users to not hear any audio.
2024-04-19 13:02:51 -04:00
Timo
379050ff80
Add back posthog connection time tracking (#2316)
Signed-off-by: Timo K <toger5@hotmail.de>
Co-authored-by: Robin <robin@robin.town>
2024-04-16 17:21:37 +02:00
Timo
9f4a107865
Revert "Track connection time on posthog (#2313)" (#2315)
This reverts commit 5e2b652690.
2024-04-16 16:21:07 +02:00
Timo
5e2b652690
Track connection time on posthog (#2313) 2024-04-16 11:48:11 +02:00
Robin
51cc406af7 Experiment with different timeouts
This lets you set the global variables peerConnectionTimeout and websocketTimeout to see what LiveKit does with different values.
2024-04-15 10:38:18 -04:00
Timo
dcc04bb10f
limit homserver to not cover the whole loginview input with the string. (#2307) 2024-04-11 11:16:45 +02:00
Robin
5121b956ca Fix participants disappearing during focus switch (probably)
I discovered that this hook was calling complete on the returned observable almost immediately when it gets mounted. This caused the call view model to never know when the application was switching focuses. At first I thought this was just because I forgot to move the call to complete to the effect's clean-up function, but even with that changed, React still calls the effect twice in strict mode. So, let's just remove the call entirely.
2024-04-05 14:27:53 -04:00
Timo
3f5c7257b3
make click highlight transparent (#2266)
Signed-off-by: Timo K <toger5@hotmail.de>
2024-03-25 16:02:40 +01:00
Timo
c932dd8c9b
Theme loading without flickering (#2233) 2024-03-13 14:58:21 +01:00
Timo
ecc7f01933
Skip effect based register in widget mode. (#2230)
Prohibits error message.

Signed-off-by: Timo K <toger5@hotmail.de>
2024-03-01 12:37:42 +01:00
Robin
d543c1a9c0 Merge branch 'livekit' into layout-state 2024-02-22 15:33:03 -05:00
Timo
893132470e
Allow Element Call theme configuration via url. (#2203)
Signed-off-by: Timo K <toger5@hotmail.de>
Co-authored-by: Robin <robin@robin.town>
2024-02-22 16:15:46 +01:00
Timo
cfb0aa5793
Add customHomeserver url Param (#2190)
* Add customHomeserver url to urlParams.

Signed-off-by: Timo K <toger5@hotmail.de>

* rename to homeserver

Signed-off-by: Timo K <toger5@hotmail.de>

---------

Signed-off-by: Timo K <toger5@hotmail.de>
2024-02-21 21:52:31 +01:00
Timo K
30b3ba302e Revert "Add theme URL param and adjust cpd theme based on it."
This reverts commit f613b17824.
2024-02-21 21:45:11 +01:00
Timo K
f613b17824 Add theme URL param and adjust cpd theme based on it.
Signed-off-by: Timo K <toger5@hotmail.de>
2024-02-21 21:41:40 +01:00
Timo
6539c15177
Dont send register request in widget mode (#2100)
* dont register in widget mode

Signed-off-by: Timo K <toger5@hotmail.de>

* not call registerPasswordlessUser where its called in a widget.

Signed-off-by: Timo K <toger5@hotmail.de>

---------

Signed-off-by: Timo K <toger5@hotmail.de>
2024-02-21 21:07:44 +01:00
Timo
21e3c606bf
Improve focus switch logging (#2153)
Signed-off-by: Timo K <toger5@hotmail.de>
Co-authored-by: Robin <robin@robin.town>
2024-02-21 15:42:52 +01:00
Timo
c4075f736f
Federated room joins (#2188) 2024-02-21 15:41:59 +01:00
Robin
f56d2cfbf4 Merge branch 'livekit' into renovate/livekit-client-2.x 2024-02-21 08:50:01 -05:00
Robin
6cfc2066c9 Add data models for the new call layouts
This is a start at implementing the call layouts from the new designs. I've added data types to model the contents of each possible layout, and begun implementing the business logic to produce these layouts in the call view model.
2024-02-20 17:19:38 -05:00
Robin
353b243686
Merge pull request #2083 from robintown/gappy-sync
Remove the gappy sync hack
2024-02-20 10:15:32 -05:00
Timo
bb570b953b
Fix: When clicking the "join call now" button twice two guests are registered. (#2173)
Signed-off-by: Timo K <toger5@hotmail.de>
2024-02-13 16:36:09 +01:00
Timo
bcd8890f0a
Add crop to fit toggle to context menu. (#2107)
Signed-off-by: Timo K <toger5@hotmail.de>
2024-02-12 16:49:32 +01:00
Robin
5502f588eb Fix errors 2024-02-09 11:22:36 -05:00
Robin
2891ce0857
Merge pull request #2138 from robintown/disable-pip
Remove the disablePictureInPicture Firefox hack
2024-02-02 09:40:03 -05:00
Robin
9669b71440 Update icon imports 2024-02-01 14:19:35 -05:00
Robin
0824963811 Remove the disablePictureInPicture Firefox hack
https://bugzilla.mozilla.org/show_bug.cgi?id=1865748 is fixed in Firefox 122.0, so we can now use the attribute the normal way.
2024-02-01 14:06:53 -05:00
Timo
35a79364a9
Widget return to lobby (#2099)
* Return to lobby after call ended in widget mode

* Wait for making the widget sticky until connected

Signed-off-by: Timo K <toger5@hotmail.de>
2024-01-26 10:03:08 +01:00
Robin
7f571b695e Remove the gappy sync hack
This hack was added in the early days of Element Call, back when we were doing call signaling using non-state room events, and missing part of a room's history could cause calls to fall apart. Nowadays we use state events for signaling, and all this hack is doing is making sync times unnecessarily long, so we can remove it.
2024-01-20 15:55:45 -05:00
Robin
2865a6c77e Revert an addition of contain: strict
I thought that adding isolation: isolate to the React root had fixed the Firefox layering glitches, but today I've started noticing those glitches again.
2024-01-10 11:04:36 -05:00
Robin
d4780b2d63 Use the new isTriggerInteractive tooltip prop 2024-01-10 10:46:13 -05:00
Robin
d3825648f2 Add mandatory TooltipProvider 2024-01-10 09:41:43 -05:00
Robin
cd5cd380d3 Update for latest context menu changes 2024-01-03 17:00:09 -05:00
Robin
21b91c503e Merge branch 'livekit' into tile-updates 2024-01-03 16:59:12 -05:00
Robin
83142a85bc
Merge pull request #1857 from element-hq/renovate/eslint-plugin-jsx-a11y-6.x-lockfile
Update dependency eslint-plugin-jsx-a11y to v6.8.0
2024-01-03 14:34:53 -05:00
Robin
54dad9430a Fix lint error 2024-01-03 14:27:39 -05:00
Robin
76d3658061
Merge pull request #2014 from robintown/display-name-lints
Ensure that all our components have display names
2024-01-03 12:09:47 -05:00
Murat Ersin
f25f5776a0
The resolved bug comment for Livekit has been deleted. (#2015)
This comment has been deleted to avoid confusion because the mentioned issue has been resolved with livekit-client version 1.15.5.
2024-01-02 14:53:53 +01:00
Robin
d95336a7a0 Ensure that all our components have display names
This turns on a lint rule to require display names for all of our components, which makes it a lot easier to find your way around the component tree in React's dev tools.
2023-12-19 11:00:33 -05:00
Robin
b2bc8edcc1 Refactor/redesign video tiles 2023-12-18 16:59:48 -05:00
Robin
e8c9444c9c Don't confuse screen share tiles with user media 2023-12-04 23:51:15 -05:00
Robin
c25d54ef75 Upgrade @livekit/components-core 2023-12-04 11:12:25 -05:00
Robin
169ccd9de5 Start refactoring some business logic into view models
As Element Call grows in complexity, it has become a pain point that our business logic remains so tightly coupled to the UI code. In particular, this has made testing difficult, and the complex semantics of React hooks are not a great match for arbitrary business logic. Here, I show the beginnings of what it would look like for us to adopt the MVVM pattern. I've created a CallViewModel and TileViewModel that expose their state to the UI as rxjs Observables, as well as a couple of helper functions for consuming view models in React code.

This should contain no user-visible changes, but we need to watch out for regressions particularly around focus switching and promotion of speakers, because this was the logic I chose to refactor first.
2023-12-01 17:09:21 -05:00
Robin
a2e932b73f Fix a couple of visual glitches on Firefox 2023-12-01 12:37:46 -05:00
Robin
5c3deeb063
Merge pull request #1953 from vector-im/renovate/i18next-23.x-lockfile
Update dependency i18next to v23.7.7
2023-11-30 23:51:06 -05:00
Robin
97488a4787 Fix types 2023-11-30 23:47:26 -05:00
Robin
c433069f90 Format code 2023-11-30 23:40:33 -05:00
Timo
3083fff480
Fix submit label (#1951)
Signed-off-by: Timo K <toger5@hotmail.de>
2023-11-30 17:31:12 +01:00
Robin
bbe1043289
Fix the settings label (#1936)
We were displaying the raw translation key rather than the translated text.
2023-11-29 19:01:45 +01:00
Robin
3b2e0acb99
Merge pull request #1883 from vector-im/renovate/testing-library-react-14.x-lockfile
Update dependency @testing-library/react to v14.1.2
2023-11-29 12:50:02 -05:00
Robin
e017468f4d Fix the invite modal overflowing
If the URL was the wrong shape, it could cause the modal to overflow, so it needs an extra nudge to line break in the right places.
2023-11-29 11:27:44 -05:00
Robin
57ed732ba8 Fix type errors 2023-11-29 10:49:17 -05:00
renovate[bot]
8bb114d7d4
Update dependency @livekit/components-react to v1.4.1 (#1923)
* Update dependency @livekit/components-react to v1.4.1

* patch to match new lk api

Signed-off-by: Timo K <toger5@hotmail.de>

---------

Signed-off-by: Timo K <toger5@hotmail.de>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Timo K <toger5@hotmail.de>
2023-11-28 20:01:12 +01:00
Timo
db859d43e9
Refactor livekit disconnect to use an effect hook. (#1925)
---------

Signed-off-by: Timo K <toger5@hotmail.de>
2023-11-28 19:07:08 +01:00
Timo
b17a76ac1a
Hotfix for hangup disconnect screen (#1921)
-  we cannot disconnect livekit before ending the rtcsession.

Signed-off-by: Timo K <toger5@hotmail.de>
2023-11-27 14:08:39 +01:00
Timo
005b0bfa5e
Fix not disconnecting from livekit session. (#1920)
Signed-off-by: Timo K <toger5@hotmail.de>
2023-11-24 17:53:15 +01:00
Robin
115dfea521
Show unencrypted media warnings in widget mode (#1915)
They weren't showing up because the video tiles didn't think that the call was encrypted in the per-participant keys case.
2023-11-23 17:50:55 +01:00
Michael Telatynski
7051c11411
I18n'ise hardcoded strings 2023-11-22 20:07:30 +00:00
Robin
de3a3b6c22
Merge pull request #1913 from robintown/disable-pip
Properly disable picture-in-picture controls
2023-11-21 12:53:47 -05:00
Robin
0c2a410033
Merge pull request #1911 from robintown/lock-accessibility
Make the encryption lock more accessible
2023-11-21 12:53:37 -05:00
David Baker
95a44f5462
Merge pull request #1902 from vector-im/dbkr/hide_rooms_no_key
Hide rooms we don't have the key for in recents list
2023-11-21 15:26:45 +00:00
fkwp
59387e5b96
Merge pull request #1912 from robintown/unencrypted-indicator
Show a warning on unencrypted media
2023-11-21 16:22:12 +01:00
David Baker
b0dac561d5 Update comment 2023-11-21 09:59:07 +00:00
David Baker
0ba550f56b
Merge pull request #1910 from vector-im/dbkr/fix_no_media_perms
Fix joining calls with no media permission
2023-11-21 09:18:00 +00:00
Robin
6ebef28ad8 Properly disable picture-in-picture controls
There were some outdated comments regarding Firefox's support of the disablePictureInPicture flag which I decided to clean up.
2023-11-20 20:42:27 -05:00
Robin
49a50514fd Show a warning on unencrypted media 2023-11-20 19:04:53 -05:00
Robin
09481d1e44 Give the lock icon an accessible label 2023-11-20 19:02:19 -05:00
Robin
fcfb818a27 Make the encryption lock tooltip accessible via the keyboard 2023-11-20 18:59:56 -05:00
Robin
aa8ef57ee0
Merge pull request #1908 from vector-im/t3chguy/localazy/2
Switch from Weblate to Localazy
2023-11-20 16:55:58 -05:00
David Baker
861d8ec016 Fix joining calls with no media permission
You can still try to unmute your media in the preview screen and
the button will show unmuted, but then mute again once you actually
join, so not 100% perfect but better.

Fixes https://github.com/vector-im/element-call/issues/1907
Fixes https://github.com/vector-im/element-call/issues/1661
2023-11-20 18:49:08 +00:00
Robin
0144aafee5 Count people as speakers even if there is a presenter 2023-11-20 13:33:45 -05:00
Michael Telatynski
70dbf95429
Specify keySeparator 2023-11-20 13:47:36 +00:00
Michael Telatynski
d5f546a093
prettier the world 2023-11-20 13:38:01 +00:00
Michael Telatynski
cd78f25936
Re-add 2 missing t calls 2023-11-20 13:22:40 +00:00
Michael Telatynski
cdbf4cac01
```
move "{{count, number}}_one" "participant_count_one"
move "{{count, number}}_other" "participant_count_other"
move "{{count}} stars_one" "star_rating_input_label_one"
move "{{count}} stars_other" "star_rating_input_label_other"
move "{{displayName}} is presenting" "video_tile.presenter_label"
move "{{displayName}}, your call has ended." "call_ended_view.headline"
move "<0></0><1></1>You may withdraw consent by unchecking this box. If you are currently in a call, this setting will take effect at the end of the call." "settings.opt_in_description"
move "<0>Already have an account?</0><1><0>Log in</0> Or <2>Access as a guest</2></1>" "register_auth_links"
move "<0>Create an account</0> Or <2>Access as a guest</2>" "login_auth_links"
move "<0>Oops, something's gone wrong.</0>" "full_screen_view_h1"
move "<0>Submitting debug logs will help us track down the problem.</0>" "full_screen_view_description"
move "<0>Thanks for your feedback!</0>" "call_ended_view.feedback_done"
move "<0>We'd love to hear your feedback so we can improve your experience.</0>" "call_ended_view.feedback_prompt"
move "<0>Why not finish by setting up a password to keep your account?</0><1>You'll be able to keep your name and set an avatar for use on future calls</1>" "call_ended_view.create_account_prompt"
move "Another user on this call is having an issue. In order to better diagnose these issues we'd like to collect a debug log." "rageshake_request_modal.body"
move "Back to recents" "lobby.leave_button"
move "By participating in this beta, you consent to the collection of anonymous data, which we use to improve the product. You can find more information about which data we track in our <2>Privacy Policy</2> and our <5>Cookie Policy</5>." "analytics_notice"
move "Call not found" "group_call_loader_failed_heading"
move "Calls are now end-to-end encrypted and need to be created from the home page. This helps make sure everyone's using the same encryption key." "group_call_loader_failed_text"
move "Confirm password" "register_confirm_password_label"
move "Connectivity to the server has been lost." "disconnected_banner"
move "Continue in browser" "app_selection_modal.continue_in_browser"
move "Create account" "call_ended_view.create_account_button"
move "Debug log request" "rageshake_request_modal.title"
move "Developer" "settings.developer_tab_title"
move "Developer Settings" "settings.developer_settings_label"
move "Element Call Home" "header_label"
move "End call" "hangup_button_label"
move "Full screen" "fullscreen_button_label"
move "Exit full screen" "exit_fullscreen_button_label"
move "Expose developer settings in the settings window." "settings.developer_settings_label_description"
move "Feedback" "settings.feedback_tab_title"
move "Grid" "layout_grid_label"
move "Spotlight" "layout_spotlight_label"
move "How did it go?" "call_ended_view.survey_prompt"
move "If you are experiencing issues or simply would like to provide some feedback, please send us a short description below." "settings.feedback_tab_body"
move "Include debug logs" "settings.feedback_tab_send_logs_label"
move "Invite to this call" "invite_modal.title"
move "Join call" "lobby.join_button"
move "Join call now" "room_auth_view_join_button"
move "Join existing call?" "join_existing_call_modal.title"
move "Link copied to clipboard" "invite_modal.link_copied_toast"
move "Local volume" "local_volume_label"
move "Logging in…" "logging_in"
move "Login" "login_title"
move "Login to your account" "unauthenticated_view_login_button"
move "Microphone off" "microphone_off"
move "Microphone on" "microphone_on"
move "More" "settings.more_tab_title"
move "Mute microphone" "mute_microphone_button_label"
move "Name of call" "call_name"
move "Not now, return to home screen" "call_ended_view.not_now_button"
move "Open in the app" "app_selection_modal.open_in_app"
move "Not registered yet? <2>Create an account</2>" "unauthenticated_view_body"
move "Participants" "header_participants_label"
move "Passwords must match" "register.passwords_must_match"
move "Ready to join?" "app_selection_modal.text"
move "Recaptcha dismissed" "recaptcha_dismissed"
move "Recaptcha not loaded" "recaptcha_not_loaded"
move "Reconnect" "call_ended_view.reconnect_button"
move "Registering…" "register.registering"
move "Retry sending logs" "rageshake_button_error_caption"
move "Return to home screen" "return_home_button"
move "Select an option" "select_input_unset_button"
move "Select app" "app_selection_modal.title"
move "Send debug logs" "rageshake_send_logs"
move "Sending debug logs…" "rageshake_sending_logs"
move "Sending…" "rageshake_sending"
move "Share screen" "screenshare_button_label"
move "Sharing screen" "stop_screenshare_button_label"
move "Show connection stats" "settings.show_connection_stats_label"
move "Speaker" "settings.speaker_device_selection_label"
move "Start new call" "start_new_call"
move "Start video" "start_video_button_label"
move "Stop video" "stop_video_button_label"
move "Submit feedback" "settings.feedback_tab_h4"
move "Submitting…" "submitting"
move "Thanks, we received your feedback!" "settings.feedback_tab_thank_you"
move "Thanks!" "rageshake_sent"
move "This application has been opened in another tab." "application_opened_another_tab"
move "This call already exists, would you like to join?" "join_existing_call_modal.text"
move "Unmute microphone" "unmute_microphone_button_label"
move "Version: {{version}}" "version"
move "Waiting for other participants…" "waiting_for_participants"
move "Yes, join call" "join_existing_call_modal.join_button"
move "You" "video_tile.sfu_participant_local"
move "You were disconnected from the call" "call_ended_view.body"
move "Your feedback" "settings.feedback_tab_description_label"
move "Your web browser does not support media end-to-end encryption. Supported Browsers are Chrome, Safari, Firefox >=117" "browser_media_e2ee_unsupported"
move "By clicking \"Go\", you agree to our <2>End User Licensing Agreement (EULA)</2>" "unauthenticated_view_eula_caption"
move "By clicking \"Join call now\", you agree to our <2>End User Licensing Agreement (EULA)</2>" "room_auth_view_eula_caption"
move "This site is protected by ReCAPTCHA and the Google <2>Privacy Policy</2> and <6>Terms of Service</6> apply.<9></9>By clicking \"Register\", you agree to our <12>End User Licensing Agreement (EULA)</12>" "register.recaptcha_caption"
```
2023-11-20 13:20:19 +00:00
Michael Telatynski
71664f5f8e
Migrate action, common, a11y translation keys
```
move () {
  FROM=$1 TO=$2 find public/locales -type f -exec sh -c 'jq ".$TO = .\"$FROM\" | del(.\"$FROM\") | del(..|nulls) | select(length > 0)" {} | sponge {}' \;
}

move "Avatar" "common.avatar"
move "Camera" "common.camera"
move "Close" "action.close"
move "Copied!" "common.copied"
move "Copy" "action.copy"
move "Copy link" "action.copy_link"
move "Encrypted" "common.encrypted"
move "Go" "action.go"
move "Home" "common.home"
move "Invite" "action.invite"
move "Loading…" "common.loading"
move "Microphone" "common.microphone"
move "No" "action.no"
move "Not encrypted" "common.unencrypted"
move "Password" "common.password"
move "Profile" "common.profile"
move "Username" "common.username"
move "Video" "common.video"
move "Register" "action.register"
move "Remove" "action.remove"
move "Settings" "common.settings"
move "Sign in" "action.sign_in"
move "Sign out" "action.sign_out"
move "Submit" "action.submit"
move "User menu" "a11y.user_menu"
move "Audio" "common.audio"
move "Display name" "common.display_name"
```
2023-11-20 12:18:43 +00:00
Robin
42c8677be1 Fix jumpy speaker tiles in spotlight mode
reorderTiles was programmed to only place a tile in the speaker section if that tile's previous position was off-screen. But for speakers that started off-screen, this would cause them to oscillate in and out of the speaker section on each render, because the speaker section is, of course, on-screen. The solution I've gone with here is to avoid referencing the previous position, and instead go by the computed natural ordering, which ought to be more stable.
2023-11-20 01:02:08 -05:00
Michael Telatynski
548d2e4d63
Wire up typescript safety net around i18next 2023-11-17 12:26:25 +00:00
Michael Telatynski
1598818db6
Switch i18n plural separator from | to _ 2023-11-17 12:08:27 +00:00
David Baker
92d61fa0f1 Hide rooms we don't have the key for in recents list 2023-11-16 16:32:25 +00:00
David Baker
081c42f5bc
Merge pull request #1892 from vector-im/dbkr/focus_switch_keep_screenshare
Keep screenshares when switching focus
2023-11-16 09:39:17 +00:00
David Baker
57ca5d1713 Another comment 2023-11-15 16:23:06 +00:00
David Baker
be5cd619bb Add comment 2023-11-15 16:20:28 +00:00
David Baker
56c4ad088f
Merge pull request #1891 from vector-im/dbkr/require_e2eeconfig
Make E2EEConfig required
2023-11-15 16:13:17 +00:00
David Baker
c146e83c15 Keep screenshares when switching focus
This also removes the use of the useLivekitRoom hook: we had reached
the point where the only thing it was actually doing was disconnecting,
so we now do that in the onClick handler for the leave button (I don't
think we need to disconnect on unmount?). It was otherwise just getting in
the way and causing tracks to be enabled/disabled when we didn't want them
to be. This also removes the need for the blockAudio code.

Fixes https://github.com/vector-im/element-call/issues/1413
2023-11-10 15:24:43 +00:00
David Baker
5ab6d18712 Make E2EEConfig required
Previously it could be either undefined or type None which meant the
same thing: no need to have both, just make it required.

This also means we can move the line to set e2ee enabled into a more
sensible place rather than in the ActiveCall de-nulling wrapper.
2023-11-10 11:54:59 +00:00
David Baker
e4e721818a Close precreated tracks if we never add them
As the log line says, this should never happen, but if it does we
still shouldn't leak tracks.
2023-11-10 11:18:20 +00:00
Timo
488b567d42
rename flags and add docs for perparticipantE2EE (#1862)
Signed-off-by: Timo K <toger5@hotmail.de>
2023-11-03 16:04:54 +01:00
David Baker
731f1e4008
Merge pull request #1772 from vector-im/dbkr/ppe2ee
Support key-per-participant e2ee
2023-10-31 20:08:05 +00:00
Timo
5008c33dfa
missing showControls condition (#1854)
Signed-off-by: Timo K <toger5@hotmail.de>
2023-10-31 16:04:22 +01:00
Timo
70f32feb5f
invert show/hide controls (#1850)
Signed-off-by: Timo K <toger5@hotmail.de>
2023-10-31 13:47:24 +01:00
David Baker
28141498b4
Merge pull request #1835 from vector-im/dbkr/sentry_migrate
Migrate to @sentry/browser
2023-10-31 09:37:02 +00:00
David Baker
1775b0948f
Merge pull request #1836 from vector-im/dbkr/add_double_mic_sentry_message
Add sentry message if we hit the extra mic check
2023-10-31 09:36:44 +00:00
David Baker
49c90a4612 Amalgamate E2EEMode & E2eeType 2023-10-30 17:06:59 +00:00
David Baker
c65ce86001 Update for renamed function
and new js-sdk containing it
2023-10-30 16:55:16 +00:00
Timo
441ad5bf2c
Fix not hanging up when using the close button (EXA EXI) (#1840)
---------

Signed-off-by: Timo K <toger5@hotmail.de>
2023-10-30 17:30:30 +01:00
Robin
adbe8042a2 Fix the build 2023-10-30 11:42:39 -04:00
Robin
e1c2d66248
Merge pull request #1810 from vector-im/renovate/vector-im-compound-design-tokens-0.x
Update dependency @vector-im/compound-design-tokens to ^0.0.7
2023-10-30 10:48:08 -04:00
Robin
5d1f4d6f22 Fix icon references 2023-10-30 10:43:59 -04:00
David Baker
70c042aeee Merge remote-tracking branch 'origin/livekit' into dbkr/ppe2ee 2023-10-27 20:48:51 +01:00
David Baker
bc0d679d50 Add sentry message if we hit the extra mic check
If we hit the condition detecting that we're trying to add an extra
mic input, send a sentry message so we know if this is happening in
the wild.
2023-10-27 16:18:00 +01:00
David Baker
0fcf6debb6 Migrate to @sentry/browser 2023-10-27 16:07:16 +01:00
Timo
58ee31d383
Add hideControls url param for screen recordings. (#1808)
---------

Signed-off-by: Timo K <toger5@hotmail.de>
2023-10-26 19:33:59 +02:00
David Baker
2d5b4dbc57 Merge remote-tracking branch 'origin/livekit' into dbkr/ppe2ee 2023-10-26 10:29:12 +01:00
David Baker
8a18dadc02 Don't log keys
Although I'm not sure this actually did anyway, but it was very spammy
2023-10-25 15:30:58 +01:00
Timo
28b46be043
Add skipLobby to params (#1730)
---------

Signed-off-by: Timo K <toger5@hotmail.de>
2023-10-25 13:49:18 +02:00
Timo
8356b722a6
Add limit condition to sync loop and add more logging what is actually going on. (#1775)
---------

Signed-off-by: Timo K <toger5@hotmail.de>
2023-10-25 13:44:33 +02:00
David Baker
99d5103dfa Stop logging encryption keys 2023-10-23 12:31:37 +01:00
David Baker
74f1aa0cba Add the file 2023-10-23 12:17:28 +01:00
David Baker
f04beab99f Make e2ee type clearer hopefully 2023-10-23 12:10:25 +01:00
David Baker
9126fb3f3e Fix key format on the wire to be base64 2023-10-20 17:31:15 +01:00
David Baker
7b538363be Don't require shared key in ppe2ee mode 2023-10-19 17:43:31 +01:00
David Baker
22ef625b55 Disable ratcheting
The auto ratcheting sets the keys and so looks like it can clobber
us setting a key from the app if they race, so just disable it, at
least for now - we aren't using it.
2023-10-19 16:50:29 +01:00
David Baker
ba999e7bc3 Update event name 2023-10-18 15:27:44 +01:00