Commit Graph

240 Commits

Author SHA1 Message Date
Tim Krüger
f10d74f0ed
Replace 'List.get(i)' with iterator to loop over list
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-08-29 19:30:01 +02:00
Andy Scherzinger
006c893318
Theme call spotlight based on server theme / material 3
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-08-11 09:50:56 +02:00
Andy Scherzinger
cbe4658632
add method to update external signaling information
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-16 14:39:18 +02:00
Andy Scherzinger
fde2667fe7
Migrate Call Activity and used classes/methods from requery to room
Resolves #2216

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-14 18:19:43 +02:00
Andy Scherzinger
7230f81cf5
Migrate conversations list and next hop controllers to use the room user entity
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-13 00:22:03 +02:00
Álvaro Brey
e7222529c1
Make private broadcast permission depend on applicationId
Otherwise we can't install QA and normal app side by side

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-12 13:16:35 +02:00
Tim Krüger
f87e0a2d85
Set PendingIntent flag immutable
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-23 15:34:11 +02:00
Tim Krüger
174a7e53d8
Remove unneeded '@SuppressLint("InlinedApi")'
The annotation '@RequiresApi' was already set correctly.

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-23 15:24:28 +02:00
Tim Krüger
10a4521af9
Rename 'WebRtcAudioManger' to 'WebRtcAudioManager'
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-23 15:20:32 +02:00
drone
272f2e839c Merge commit '58c40e6ee244e6b78cc8754e8cc621e8400507d7' 2022-06-23 08:59:34 +00:00
Andy Scherzinger
331309405d
Set intent flag required by Android 12 (SDK 31)
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-23 10:21:03 +02:00
Andy Scherzinger
3096d90bc6
only set intent flag for sdk>=31
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-22 11:21:46 +02:00
Andy Scherzinger
1f936cb677
migrate to sdk=31
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-22 10:59:38 +02:00
Tim Krüger
6e4841ae3a
Rename 'MagicAudioManager' and 'MagicBluetoothManager'
It's not magic but WebRtc related.

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-21 15:13:47 +02:00
Tim Krüger
e14f00fae7
Request 'BLUETOOTH_CONNECT' permissions
Request the 'BLUETOOTH_CONNECT' permissions if not already granted.

If the permission is be granted in this request, the
'MagicBluetoothManger' will be started.

See: #2132

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-21 15:13:40 +02:00
Álvaro Brey
bb7e82fbcb
Use custom permission for unfiltered broadcast receiver in CallActivity
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-06-14 15:51:04 +02:00
Marcel Hibbe
a23d4ef692 add silent call feature
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-05-25 09:58:57 +00:00
Álvaro Brey
093af7f79d
Remove parceler annotation processor
Not needed anymore after #2061

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-05-18 15:37:55 +02:00
Andy Scherzinger
36e2a81958
Migrate CallStatus enum to kotlin, parcelized enum
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-05-18 00:36:38 +02:00
Andy Scherzinger
a617f10473
Migrate participant to kotlin data class
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-05-16 23:06:29 +02:00
Marcel Hibbe
a43a51b931
try to fix #1978
i suspect that peerConnectionFactory could have been null because e.g. "hangup()" was already called which sets it to null. Because of some async task getOrCreatePeerConnectionWrapperForSessionIdAndType might still be called afterwards and it failed because peerConnectionFactory was already null.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-05-09 13:00:01 +02:00
Marcel Hibbe
4414002b8a
reformat code
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-05-09 12:44:51 +02:00
Tim Krüger
e52b2d8b7f
Add null checks and extract constants
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-05-05 13:06:15 +02:00
Tim Krüger
4f5a344a20
Add handling for "event.participants.update.all"
In case a moderator of a restricted room ends the call for all
participants a update participants event with the field 'all=true' will
be thrown by the HPB.

    {
      "type": "event"
      "event": {
        "target": "participants",
        "type": "update",
        "update": [
          "roomid": "the-room-id",
          "incall": new-incall-state,
          "all": true
        ]
      }
    }

In that case the call can be ended directly without handling every
single participant.

Resolves: #1881

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-05-04 13:49:04 +02:00
Tim Krueger
73b772dfa1
Merge pull request #1941 from nextcloud/fix-call-flags-in-video-calls
Fix call flags in video calls
2022-04-25 12:38:46 +02:00
Daniel Calviño Sánchez
07ca8c1e29
Fix call flags in video calls
The call flags describe the streams provided by the client, so in a
video call both audio and video are provided, not just video.

Note that as publishing permissions are currently not implemented in the
Android app the provided flags do not take into account the available
permissions. Nevertheless, the server restricts the flags based on the
permissions, so the other participants would see the appropriate flags.
In the future it would be better to send the right flags directly from
the Android app.

Similarly, for now, it is just assumed that both audio and video tracks
will be provided by the Android app, but the flags should reflect the
actually available tracks (for example, if it was not possible to get a
video track for some reason the call flags should not include
"WITH_VIDEO").

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-04-25 11:54:22 +02:00
Daniel Calviño Sánchez
5bd920142c Create a connection only for offers instead of for any message
The Android app creates a connection with a participant when that
participant joins the call and ends it when the participant leaves the
call. However, it also created a connection when any signaling message
was received from a participant that had no connection yet. Due to this
if a signaling message was received from a participant before that
participant was in the call the Android app tried to establish a
connection too soon, which would be rejected by the HPB.

Similarly, if a signaling message was received from a participant after
that participant left the call a connection will try to be established.
That would fail, but the connection object was not removed, and if that
participant joined the call again no connection would be established, as
a connection for that participant was already found, even if it was not
usable.

To solve that now a connection is created when a signaling message is
received only if that message is an offer (which is necessary without
HPB if the other participant sends the offer before this participant
"noticed" that she is in the call); otherwise the message is ignored.

Besides that a connection will no longer be created either when setting
up the video stream. However, this would be just for correctness and it
should not make any difference, as the MediaStreamEvents that cause that
are only emitted by changes in peer connections, so they should be
already created.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-04-22 14:38:26 +02:00
Daniel Calviño Sánchez
a8045880f9 Rename method to a more consistent name with its sibling method
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-04-22 02:31:21 +02:00
Daniel Calviño Sánchez
c769ff0fd0 Rename method to a more accurate name
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-04-22 02:30:46 +02:00
Marcel Hibbe
1b30a6ef62
allow getPeersForCall without QueryMap
- null was not allowed for query map (led to Illegal Argument Exception which caused issue #1853)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-03-17 15:17:32 +01:00
Marcel Hibbe
508f519468
set fixed avatar sizes for requests
necessary because of https://github.com/nextcloud/server/pull/31010

known issue: avatars in chat messages are too big atm

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-03-02 15:15:22 +01:00
Andy Scherzinger
a3e86d841f
correct enum comparisons and add constants for fixed values
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-02-25 12:23:56 +01:00
Marcel Hibbe
d453773a1d
show user statuses in conversation info (wip)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-25 12:11:40 +01:00
Tim Krüger
3d76ba3571
Close localStream after peerConnection
The peerConnection get passed the tracks of the localStream. So to make
sure that the tracks are not released before the connection is closed it
will now done after closing the peerConnection.

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-02-23 12:34:04 +01:00
Tim Krüger
f08a9ef463
Rename MagicPeerConnectionWrapper to PeerConnectionWrapper
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-02-23 12:21:41 +01:00
Tim Krüger
5b95b5675d
Rename localMediaStream to localStream
Align naming to the names used in WebRTC example code and documentation.

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-02-23 11:36:41 +01:00
Tim Krüger
86f20dcfd3
Migrate WebRTC from plan b to unified plan
The in 'MagicPeerConnectionWrapper#removePeerConnection' used method
'PeerConnection#removeStream' was not longer available in the unified
plan. So to make sure that the local stream is disposed, it will now be
done in 'CallActivity#hangup'.

Resolves: #1773
See: [1]

[1] https://webrtc.org/getting-started/unified-plan-transition-guide
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-02-23 11:36:41 +01:00
Marcel Hibbe
7f0980e6d2
format code + fix klint/findbugs warnings
remove hardcodings

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>

remove hardcodings

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 14:27:38 +01:00
Marcel Hibbe
51df0e67f4
add UI logic for wired headset
if wired headset is plugged in hide earpiece and speaker icons

if wired headset is plugged out show earpiece and speaker icons

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 13:09:41 +01:00
Marcel Hibbe
a34eb89570
modify behaviour of proximity sensor
use proximity sensor only if it is a voiceOnly call and userSelectedAudioDevice was SPEAKER_PHONE

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 13:09:41 +01:00
Marcel Hibbe
338f06dda1
update UI if audio output device changed
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 13:09:40 +01:00
Marcel Hibbe
3587fe6e12
use speaker if no bluetooth is available
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 13:09:40 +01:00
Marcel Hibbe
ffb223a66f
highlight active audio output
use layout weight

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 13:09:40 +01:00
Marcel Hibbe
78b29082bf
show audio button also for videocalls
use layout weight

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 13:09:39 +01:00
Marcel Hibbe
9c0fa9acc2
select audio device (WIP)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 13:09:39 +01:00
Marcel Hibbe
9b889d232f
add UI to switch audio output in call
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-02-07 13:09:39 +01:00
Marcel Hibbe
5272d35f01 fix to stop audio manager in ui thread
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-01-12 12:29:06 +00:00
Marcel Hibbe
d17a8e9dbd ad some logging
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-01-12 12:29:06 +00:00
Marcel Hibbe
175f479d0f replace check for boolean variant of inCallFlag
(boolean variant is deprecated since nc14)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-01-12 12:29:06 +00:00
Marcel Hibbe
76aaafb024 replace deprecated ParticipantFlags with InCallFlags
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-01-12 12:29:06 +00:00