Commit Graph

45 Commits

Author SHA1 Message Date
Marcel Hibbe
6445633c94
simplify call grid design for voice only calls
this will remove the workaround regarding heightForNonGridComponents by using a BoxWithConstraints

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-28 15:04:05 +02:00
Marcel Hibbe
31433f8ed9
adapt avatar size to box size
..by using a BoxWithConstraints

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-13 17:15:58 +02:00
Marcel Hibbe
6a048fde08
improve/fix contents for picture in picture mode
depending on amount of participants, voiceOnly call and enabled/disabled own video, the contents of PIP windows are updated.

This will be further improved when speaker-view is implemented.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-13 11:40:33 +02:00
Marcel Hibbe
eaed93087b
simplify participant data structure
move ParticipantUiState into ParticipantDisplayItem

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 15:01:26 +02:00
Marcel Hibbe
962972dce4
resolve lint/detekt warnings
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:42 +02:00
Marcel Hibbe
74d937c901
ktlint format + fix lint warning
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:41 +02:00
Marcel Hibbe
c3b09ddf90
add background colors like in web to participant tile
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:40 +02:00
Marcel Hibbe
257dc2af54
only show avatars for voiceonly calls
improve pip handling a bit

minor changes

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:40 +02:00
Marcel Hibbe
1136508ba2
fix voice only call design by workaround.
For now, instead to measure height mixed from xml and compose, assume a fixed height for the xml views (callInfosLinearLayout and callControls) to limit the grid height.
They is not a nice solution and should be replaced once everything is migrated to compose.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:39 +02:00
Marcel Hibbe
d546046d5b
add shadow to nick name
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:39 +02:00
Marcel Hibbe
91b0e97589
show rounded circle for avatar
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:39 +02:00
Marcel Hibbe
15d7c8371c
simplify grid cell calculation
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:39 +02:00
Marcel Hibbe
bcb276d533
add padding to cells
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:38 +02:00
Marcel Hibbe
ecf6d362bf
calculate item height
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:38 +02:00
Marcel Hibbe
2741f5962a
sort participants by audio/video (experimental, commented out)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:38 +02:00
Marcel Hibbe
35c777e70d
move SurfaceViewRenderer into WebRTCVideoView
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:38 +02:00
Marcel Hibbe
aacc013485
improve call participants layout
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:37 +02:00
Marcel Hibbe
42a8afded8
fix z index of videos and click listener to show controls
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:37 +02:00
Marcel Hibbe
feeec78ab4
WIP migrate call grid to compose
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-05-12 13:55:37 +02:00
Daniel Calviño Sánchez
512b320015
Send state also through signaling messages
The speaking state is still sent only through data channels, as it is
not currently handled by other clients when sent through signaling
messages.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:17 +01:00
Daniel Calviño Sánchez
ea2bebe3b0
Add support for sending signaling messages in the MessageSender
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:16 +01:00
Daniel Calviño Sánchez
0ec5175c61
Send current state to remote participants when they join
Note that this implicitly send the current state to remote participants
when the local participant joins, as in that case all the remote
participants already in the call join from the point of view of the
local participant

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:16 +01:00
Daniel Calviño Sánchez
ea4bccdaf7
Add support for sending data channel messages to a single participant
This is not possible when Janus is used, as Janus only allows
broadcasting data channel messages to all the subscribers of the
publisher connection.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:16 +01:00
Daniel Calviño Sánchez
fe32bc1628
Add helper class to broadcast the local participant state
The LocalStateBroadcaster observes changes in the
LocalCallParticipantModel and notifies other participants in the call as
needed. Although it is created right before joining the call there is a
slim chance of the state changing before the local participant is
actually in the call, but even in that case other participants would not
be notified about the state due to the MessageSender depending on the
list of call participants / peer connections passed to it, which should
not be initialized before the local participant is actually in the call.

There is, however, a race condition that could cause participants to not
be added to the participant list if they join at the same time as the
local participant and a signaling message listing them but not the local
participant as in the call is received once the CallParticipantList was
created, but that is unrelated to the broadcaster and will be fixed
in another commit.

Currently only changes in the audio, speaking and video state are
notified, although in the future it should also notify about the nick,
the raised hand or any other state (but not one-time events, like
reactions). The notifications right now are sent only through data
channels, but at a later point they will be sent also through signaling
messages as needed.

Similarly, although right now it only notifies of changes in the state
it will also take care of notifying other participants about the current
state when they join the call (or the local participant joins).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:15 +01:00
Daniel Calviño Sánchez
cb52fb349f
Add data model for local call participants
This is the counterpart of CallParticipantModel for the local
participant. For now it just stores whether audio and video are enabled
or not, and whether the local participant is speaking or not, but it
will be eventually extended with further properties.

It is also expected that the views, like the button with the microphone
state, will update themselves based on the model. Similarly the model
should be moved from the CallActivity to a class similar to
CallParticipant but for the local participant. In any case, all that is
something for the future; the immediate use of the model will be to know
when the local state changes to notify other participants.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:15 +01:00
Daniel Calviño Sánchez
36a29ed36e
Send data channel messages only to "video" peer connections
Data channel messages are expected to be sent only to peer connections
with "video" type, which provide the audio and video tracks of the
participant (and, in fact, peer connections for screen shares do not
even have data channels enabled in the WebUI).

Note that this could change if at some point several audio/video tracks
are sent in the same peer connection, or if "speaking" messages are
added to screen shares, but that will be addressed if/when that happens.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:15 +01:00
Daniel Calviño Sánchez
3e36c85015
Add helper class to send messages to call participants
For now it just provides support for sending a data channel message to
all participants, so notifying all participants when the media is
toggled or the speaking status change can be directly refactored to use
it.

While it would have been fine to use a single class for both MCU and no
MCU they were split for easier and cleaner unit testing in future
stages.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:15 +01:00
Andy Scherzinger
3ac1b18d3d
fix(spotbugs): Improve spotbugs scoring
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-11-07 15:42:58 +01:00
Daniel Calviño Sánchez
1c0e473e1a Fix ignored blank lines in Javadocs
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2024-10-18 14:28:55 +02:00
Daniel Calviño Sánchez
3b7c5e1d27
Store actor data from signaling messages with participant updates
Starting with Talk 20 the signaling messages that provide updates to the
participants ("participants->update" in the external signaling server,
"usersInRoom" in the internal signaling server) now include "actorType"
and "actorId" properties for each participant.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2024-09-13 15:51:20 +02:00
Andy Scherzinger
f5a4274e54
Add SPDX header
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-03-29 15:42:11 +01:00
Andy Scherzinger
627e9d5c20
ktlint: No whitespace expected between opening parenthesis and first parameter name
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-12-05 16:17:31 +01:00
Andy Scherzinger
7ad8e304e2
codacy: Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes.
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-01 22:27:43 +02:00
Andy Scherzinger
c084d63944
codacy: Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes.
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-01 19:10:35 +02:00
Andy Scherzinger
c6e082c6b1
Replace any magic numbers detekt-ed
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 09:47:27 +02:00
Andy Scherzinger
5ec013143f
Migrate theme API calls - away from deprecated ones
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 09:08:18 +02:00
Marcel Hibbe
c379630610
add animated emoji reactions to calls (no signaling yet)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-04 16:49:46 +02:00
Daniel Calviño Sánchez
92d655080d
Add "reaction" event to CallParticipantModel observer
The CallParticipantModel observer now also emits one-time events that
are not reflected in the model state.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2023-05-04 15:15:36 +02:00
Daniel Calviño Sánchez
0a54fd6127
Add listener for "reaction" signaling message
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2023-05-04 15:15:35 +02:00
Marcel Hibbe
f9fdb387a5
Hide call recording participant
<dev@mhibbe.de>

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-03-17 15:17:55 +01:00
Marcel Hibbe
91f0634c74
Fix CI warnings
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-02-01 16:29:50 +01:00
Daniel Calviño Sánchez
4bd3cc826c
Keep track of raised hands by remote participants
Note the slight difference in naming between the signaling message
("raiseHand", the action) and the stored data ("RaisedHand", the record
of the action).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2023-02-01 12:57:41 +01:00
Daniel Calviño Sánchez
ab72db7a10 Add helper class to keep track of the participants in a call
For now only the same signaling messages that were already handled are
still handled; in the future it could be extended to handle other
messages, like the one sent by the external signaling server when a
participant leaves the room (in some cases no participants update
message is sent if the participant leaves the call and room at the same
time, which causes the participants to still be seen as in call until a
new update is received).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2023-01-16 09:05:51 +00:00
Daniel Calviño Sánchez
175944e932 Move handling of call participants to its own class
CallParticipant provides a read-only CallParticipantModel and internally
handles the data channel and peer connection events that modify the
model. Nevertheless, the CallParticipant requires certain properties to
be externally set, like the userId or the peer connections.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2023-01-16 09:05:50 +00:00
Daniel Calviño Sánchez
d72648379e Add model for (remote) call participants
Clients that modify the model would define the variables using the
mutable subclass, while clients that only need to access the model are
expected to use the read-only base class.

The read-only class provides an observer; as it is expected that the
model will be modified from background threads but observed from the
main thread the observer can be registered along a handler to be
notified on its thread, independently of on which thread the values were
set.

Currently there does not seem to be a need to observe each value on its
own, so the observer is notified in a coarse way when any value changes.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2023-01-16 09:05:50 +00:00