Commit Graph

7961 Commits

Author SHA1 Message Date
Marcel Hibbe
db8c4de028
fix to not cut off unread mentions bubble
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-15 10:33:52 +01:00
Nextcloud bot
172eddb217
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-15 03:03:33 +00:00
rapterjet2004
19aec5460a
figured it out - was an error with offline conversations not syncing. Chat permissions were updated on server, but not on device.
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-14 16:35:55 +01:00
Nextcloud bot
f0d7ff53c6
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-14 01:43:51 +00:00
Nextcloud Android Bot
36716fa788 Weekly 21.0.0 Alpha 09 2025-01-13 03:12:47 +00:00
Nextcloud bot
6638f449a6
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-13 03:01:44 +00:00
Nextcloud bot
d3b3052436
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-12 03:13:26 +00:00
Nextcloud bot
7851de68e9
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-11 03:01:45 +00:00
github-actions[bot]
60bae8784e
Merge pull request #4587 from nextcloud/renovate/daggerversion
Update daggerVersion to v2.55
2025-01-10 13:00:09 +00:00
renovate[bot]
6ed20f4b13 Update daggerVersion to v2.55
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-10 13:42:47 +01:00
Marcel Hibbe
cd096366c5
change icons for message sending and messages sending failed
remove shadowed var

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 13:18:47 +01:00
Marcel Hibbe
68065d7e21
fix lint warning
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:32 +01:00
Marcel Hibbe
aa5b4d028a
remove click listener for failed messages (use default longclick)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:32 +01:00
Marcel Hibbe
3094054b73
change visibility of temp message actions
during sending: edit and delete should not be shown..

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:32 +01:00
Marcel Hibbe
1504e51499
add strings for message status icons
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:32 +01:00
Marcel Hibbe
1731ca0985
remove flickering of status icons
by moving networkMonitor.isOnline to separate check and by setting
binding.checkMark.visibility = View.INVISIBLE
binding.sendingProgress.visibility = View.GONE
before setting the status icons
to to handle recyclerview behavior

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:32 +01:00
Marcel Hibbe
f665b1c116
save "silent" in chat messages (incl DB)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:32 +01:00
Marcel Hibbe
3fdaa4bdcd
fix parent message for temp messages
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:31 +01:00
Marcel Hibbe
4c795139ac
add DB migration
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:31 +01:00
Marcel Hibbe
a58607b547
resolve detekt warnings
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:31 +01:00
Marcel Hibbe
560f955002
comment in opHelperFactory
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:31 +01:00
Marcel Hibbe
3dca00bac0
resolve warnings
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:31 +01:00
Marcel Hibbe
ab007fc444
resolve codacy/ktlint warnings
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:30 +01:00
Marcel Hibbe
8f1f22fd54
Fix duplicate "Today"-bug
If user sent a message as a first message in today's chat, the temp message will be deleted when messages are retrieved from server, but also the date has to be deleted as it will be added again when the chat messages are added from server. Otherwise date "Today" would be shown twice.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:30 +01:00
Marcel Hibbe
0356f5ac3c
fix to not accidentally show unread messages popup
reason was that the UI was not yet loaded but isScrolledToBottom was already called, so findFirstVisibleItemPosition returned -1.

Fix for now is to return true for isScrolledToBottom when position is -1

They does not solve the root cause for now. It should be made sure the code is not executed until UI is ready.
A quick try with
repeatOnLifecycle(Lifecycle.State.STARTED)
when collecting getMessageFlow did not help.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:30 +01:00
Marcel Hibbe
29362fab4b
add logging for unread messages popup bug
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:30 +01:00
Marcel Hibbe
b529d1328a
delete roomId comments
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:30 +01:00
Marcel Hibbe
a5049fbb1f
adjust some pixels to avoid jump of message list
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:29 +01:00
Marcel Hibbe
7d9c2fdd30
simplify to refresh message
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:29 +01:00
Marcel Hibbe
cca4e69cea
Skip to send message when device is offline
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:29 +01:00
Marcel Hibbe
f62941f6aa
simplify "sent messages are queued" hint
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:29 +01:00
Marcel Hibbe
656be3ffce
revert ReadStatus SENDING and FAILED
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:29 +01:00
Marcel Hibbe
06c8509587
add retry logic for sending messages, hide resend button when offline
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:28 +01:00
Marcel Hibbe
2c397ad517
add manual resend button
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:28 +01:00
Marcel Hibbe
e9f3863375
delete temp messages
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:28 +01:00
Marcel Hibbe
5ac130a020
resend queued messages when connection gained
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:28 +01:00
Marcel Hibbe
f88b1f17f2
fix after merge conflicts
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:28 +01:00
Marcel Hibbe
1bfb3ba027
WIP add options to temp messages
TODO:
check id type --> see TODO "currentTimeMillies fails as id because later on in the model it's not Long but Int!!!!" in OfflineFirstChatRepository.kt

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:27 +01:00
Marcel Hibbe
ec466e58f0
replace CharSequence with String for sendChatMessage
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:27 +01:00
Marcel Hibbe
0f53244652
prepare to replace no-internet-connection message handling (sorry Julius!!)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:27 +01:00
Marcel Hibbe
3f5f2f024a
works okay (no resend logic yet, offline message mode not reworked)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:27 +01:00
Marcel Hibbe
e1c1574d6c
show x when sending failed
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:27 +01:00
Marcel Hibbe
a78c9e1c08
update temp messages also for initial pull of messages
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:26 +01:00
Marcel Hibbe
0e682ed894
WIP temp messages are replaced when same refId received from sever
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:26 +01:00
Marcel Hibbe
048551e9fb
temp message is added (values are still wrong)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:26 +01:00
Marcel Hibbe
80d2e75b60
WIP add temporary message
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:26 +01:00
Marcel Hibbe
c33bd997a4
fixes after some wrong merge after merge conflict
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:26 +01:00
Marcel Hibbe
3597cf2085
use repository in MessageInputViewModel instead datasource
(as datasources should be only used in repositories)

use coroutines instead RxJava for api calls triggered by MessageInputViewModel

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:26 +01:00
Marcel Hibbe
9cb40d4eb6
add referenceId for "normal" sending of chat message
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 12:32:25 +01:00
Marcel Hibbe
5053c0ea90
fix SPDX header, remove comments
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 11:37:08 +01:00
rapterjet2004
490cd32c25
Impl changes, unable to replicate 1.)
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2025-01-10 11:37:07 +01:00
rapterjet2004
a8f1d37236
oops
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2025-01-10 11:37:07 +01:00
rapterjet2004
73ed4cbf8f
linter
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2025-01-10 11:37:07 +01:00
rapterjet2004
63cb98ece7
Deleted old fragment + xml
Added string res
Fixed bug with embedded date picker boundaries, animated size change

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2025-01-10 11:14:35 +01:00
rapterjet2004
eae4e43ab2
Small fixes - new theming
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2025-01-10 11:14:35 +01:00
rapterjet2004
d114142d09
Migrating away from java.util.Date to java.time
- Also converted dialog fragment to compose

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2025-01-10 11:14:34 +01:00
Nextcloud bot
6d1ffbdb14
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-10 09:53:29 +00:00
Marcel Hibbe
8218616b99
fix translation for polls_option_delete
$s -> $d

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-10 10:33:15 +01:00
Nextcloud bot
5887835169
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-10 03:01:46 +00:00
Nextcloud bot
d89393c66e
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-09 16:44:09 +00:00
Marcel Hibbe
45477170ab
Merge pull request #4584 from nextcloud/correctTranslation
$s -> $d
2025-01-09 16:55:35 +01:00
Nextcloud bot
744280af41
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-09 14:33:32 +00:00
tobiasKaminsky
5fd966fc57
$s -> $d
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
2025-01-09 15:28:33 +01:00
Nextcloud bot
e5c443c787
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-09 14:09:30 +00:00
Marcel Hibbe
8d0c94834a
add animation to "unread mentions" button + change design
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-08 17:22:04 +01:00
sowjanyakch
4c7d105d2f
remove popup bubble dependency
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 17:22:04 +01:00
sowjanyakch
d5968100dc
hide button when scrolling to unread mention
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 17:22:03 +01:00
sowjanyakch
b6320287d5
Changes to ConversationsListActivity
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 17:22:03 +01:00
sowjanyakch
4d6726d9cd
replace popup button with material button
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 17:22:03 +01:00
sowjanyakch
d36f3c92c6
show send button when there is text in input message field
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 16:38:32 +01:00
sowjanyakch
006cfae6f1
sort conversations only if text is present
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 16:02:28 +01:00
sowjanyakch
298cf3a249
ktlintFormat
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 16:02:28 +01:00
sowjanyakch
9068a42f10
configured editText to occupy single line
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 16:02:28 +01:00
sowjanyakch
0035e03cd2
remove unused code
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 16:02:28 +01:00
sowjanyakch
e2dc525bf1
implement search in open conversations
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 16:02:27 +01:00
sowjanyakch
38135f845e
use field parameter "searchTerm"
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-08 16:02:26 +01: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
73105515bd
Rename variable
This will be used to have separate counts for data channel and signaling
messages.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:16 +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
8644d05636
Move attributes to local variables
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
Daniel Calviño Sánchez
8fa3224879
Set "hasMCU" once its value is known
"hasMCU" (which has always been the wrong name, because it is an SFU
rather than an MCU, but it is wrong even in the signaling server so for
now the legacy name is kept) was set again and again whenever the call
participant list changed. Now it is set instead once its value is known,
that is, when it is known that the internal signaling server is used (as
no "MCU" is used in that case), or when the connection with the external
signaling server is established, as its supported features are not known
until then.

This change should have no effect in the usages of "hasMCU", as it is
used when the call participant list change, which will happen only after
joining the call in the signaling server, or when sending "isSpeaking"
and toggling media, in both cases guarded by "isConnectionEstablished",
which will be true only once "performCall" was called or if the call is
active with other participants.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-08 12:35:14 +01:00
renovate[bot]
c3b0358acf
fix(deps): update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.8.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 09:57:44 +00:00
sowjanyakch
9d76a1e7ed
open .webm video files with internal player
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-01-07 19:42:55 +01:00
Nextcloud Android Bot
1d0ce26dcc Weekly 21.0.0 Alpha 08 2025-01-06 03:10:30 +00:00
Nextcloud bot
214623a7af
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-04 03:03:24 +00:00
Daniel Calviño Sánchez
f112e26d25
Fix SDP constraints used by PeerConnectionWrapper
The SDP constraints for publisher connections when the MCU is used were
set for all connections. Those constraints set "OfferToReceiveAudio" and
"OfferToReceiveVideo" to false, which disables receiving audio and video
when the local participant is the one sending the offer. Therefore,
audio and video was not received when the MCU was not used and the local
participant was the one initiating the connection.

The "OfferToReceiveXXX" configurations have no effect when set on an
answer (and thus are not even set, an empty MediaConstraints is used in
that case). However, when "OfferToReceiveVideo = false" is set the video
transceiver is explicitly stopped (which is used to avoid receiving
video when joining a call with audio only). Therefore, as
"OfferToReceiveVideo = false" was always set, video was never received
in subscriber connections when the MCU is used, or connections initiated
by the other peer when the MCU is not used.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 13:26:43 +01:00
Daniel Calviño Sánchez
94257da123
Rename attribute to a more accurate name
The SDP constraints should be set when the MCU is used, but only for
publisher connections; receiver connections should use the general SDP
constraints.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 13:26:42 +01:00
Marcel Hibbe
22efcd7e83
Merge pull request #4574 from nextcloud/convertLogClassToKotlin
Convert log class to kotlin
2025-01-03 13:14:00 +01:00
Marcel Hibbe
3874751fcb
convert Log class to kotlin
@JvmStatic is necessary to keep the static behavior of the method calls

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-03 12:44:56 +01:00
Marcel Hibbe
7680d51b09
Rename .java to .kt
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-03 12:44:53 +01:00
renovate[bot]
f21fe475a9
Update mockito monorepo to v5.15.2
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-03 11:37:28 +00:00
Daniel Calviño Sánchez
d63bb31595
Fix "send" not respecting order of pending messages
When the data channel is not open yet data channel messages are queued
and then sent once opened. "onStateChange" is called from the WebRTC
signaling thread, while "send" can be called potentially from any
thread, so to send the data channel messages in the same order that they
were added new messages need to be enqueued until all the pending
messages have been sent. Otherwise, even if there is synchronization
already, it could happen that "onStateChange" was called but, before
getting the lock, "send" gets it and sends the new message before the
pending messages were sent.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:43 +01:00
Daniel Calviño Sánchez
b6d6986b62
Fix "removePeerConnection" not being thread-safe
Adding and disposing remote data channels is done from different
threads; they are added from the WebRTC signaling thread when
"onDataChannel" is called, while they can be disposed potentially from
any thread when "removePeerConnection" is called. To prevent race
conditions between them now both operations are synchronized.

However, as "onDataChannel" belongs to an inner class it needs to use a
synchronized statement with the outer class lock. This could still cause
a race condition if the same data channel was added again; this should
not happen, but it is handled just in case.

Moreover, once a data channel is disposed it can be no longer used, and
trying to call any of its methods throws an "IllegalStateException". Due
to this, as sending can be also done potentially from any thread, it
needs to be synchronized too with removing the peer connection.

State changes on data channels as well as receiving messages are also
done in the WebRTC signaling thread. State changes needs synchronization
as well, although receiving messages should not, as it does not directly
use the data channel (and it is assumed that using the buffers of a
disposed data channel is safe). Nevertheless a little check (which in
this case requires synchronization) was added to ignore the received
messages if the peer connection was removed already.

Finally, the synchronization added to "send" and "onStateChange" had the
nice side effect of making the pending data channel messages thread-safe
too, as before it could happen that a message was enqueued when the
pending messages were being sent, which caused a
"ConcurrentModificationException".

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:43 +01:00
Daniel Calviño Sánchez
a301bdeb76
Store data channel label
Getting the label is no longer possible once the data channel has been
disposed. This will help to make the observer thread-safe.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:43 +01:00
Daniel Calviño Sánchez
fae86910b8
Add logs for sending data channel messages
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:42 +01:00
Daniel Calviño Sánchez
ddd451dadb
Queue data channel messages sent when data channel is not open
Data channel messages can be sent only when the data channel is open.
Otherwise the message is simply lost. Clients of the
PeerConnectionWrapper do not need to be aware of that detail or keep
track of whether the data channel was open already or not, so now data
channel messages sent before the data channel is open are queued and
sent once the data channel is opened.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:42 +01:00
Daniel Calviño Sánchez
7cfee8f848
Split condition
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:42 +01:00
Daniel Calviño Sánchez
bcd3893e7d
Rewrite method to return early
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:42 +01:00
Daniel Calviño Sánchez
c222e01095
Move variable declaration into try block
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:41 +01:00
Daniel Calviño Sánchez
4d4b8832aa
Fix remote data channels not disposed when removing peer connection
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:41 +01:00
Daniel Calviño Sánchez
c940175453
Send data channel messages using "status" data channel
Data channel messages are expected to be sent using the "status" data
channel that is locally created. However, if another data channel was
opened by the remote peer the reference to the "status" data channel was
overwritten with the new data channel, and messages were sent instead on
the remote data channel.

In current Talk versions that was not a problem, and the change makes no
difference either, because since the support for Janus 1.x was added
data channel messages are listened on all data channels, independently
of their label or whether they were created by the local or remote peer.

However, in older Talk versions this fixes a regression introduced with
the support for Janus 1.x. In those versions only messages coming from
the "status" or "JanusDataChannel" data channels were taken into
account. When Janus is not used the WebUI opens the legacy
"simplewebrtc" data channel, so that data channel may be the one used to
send data channel messages (if it is open after the "status" data
channel), but the messages received on that data channel were ignored by
the WebUI. Nevertheless, at this point this is more an academic problem
than a real world problem, as it is unlikely that there are many
Nextcloud servers with Talk < 16 and without HPB being used.

Independently of all that, when the peer connection is removed only the
"status" data channel is disposed, but none of the remote data channels
are. This is just a variation of an already existing bug (the last open
data channel was the one disposed due to being the last saved reference,
but the rest were not) and it will be fixed in another commit.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:41 +01:00
Daniel Calviño Sánchez
a4cce0581c
Rename "sendChannelData" to "send"
The legacy name was a bit strange, so now it is renamed to just "send"
as the parameter type ("DataChannelMessage") gives enough context.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:41 +01:00
Daniel Calviño Sánchez
1f872553b9
Include data channel label in log message
This implicitly fixes trying to send the initial state on the latest
remote data channel found (which is the one stored in the "dataChannel"
attribute of the "PeerConnectionWrapper") when any other existing data
channel changes its status to open. Nevertheless, as all this will be
reworked, no unit test was added for it.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:40 +01:00
Daniel Calviño Sánchez
4daadc508c
Unify log messages for received data channel messages
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:40 +01:00
Daniel Calviño Sánchez
08630790b7
Add unit tests for receiving data channel messages
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:40 +01:00
Daniel Calviño Sánchez
ed69d96a43
Add dummy Log implementation to be used in tests
Log methods are static, so they can not be mocked using Mockito.
Although it might be possible to use PowerMockito a dummy implementation
was added instead, as Log uses are widespread and it is not something
worth mocking anyway.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:40 +01:00
Daniel Calviño Sánchez
d34fdfb1c5
Remove Dagger related code from PeerConnectionWrapper
The PeerConnectionWrapper does not need to be injected in the
application, nor the Context needs to be injected in the
PeerConnectionWrapper. This all seems to be leftovers from the past, and
removing them would ease adding unit tests for the
PeerConnectionWrapper.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:39 +01:00
Nextcloud bot
a65b52b0e5
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-03 03:03:50 +00:00
Nextcloud Android Bot
e5d946d973 Weekly 21.0.0 Alpha 07 2024-12-30 03:10:49 +00:00
Nextcloud bot
b0658caea2
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-28 03:04:16 +00:00
Nextcloud bot
9630fc130d
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-27 03:04:12 +00:00
Nextcloud bot
d092f03c96
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-26 03:04:24 +00:00
Nextcloud bot
bc5a289ee5
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-25 03:03:55 +00:00
Nextcloud bot
97e4e3aa90
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-24 03:02:01 +00:00
Nextcloud Android Bot
3a85f146b1 Weekly 21.0.0 Alpha 06 2024-12-23 03:12:34 +00:00
Nextcloud bot
e7e6e421b0
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-23 03:01:48 +00:00
Nextcloud bot
127034fe33
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-22 03:18:49 +00:00
Andy Scherzinger
62d1eeafce
fix(ktlint): correct code formatting
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-21 16:50:40 +01:00
Nextcloud bot
144ccc4106
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-21 03:03:23 +00:00
renovate[bot]
85efdd5a7b
Update daggerVersion to v2.54
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 20:03:07 +00:00
github-actions[bot]
7e5755325d
Merge pull request #4561 from nextcloud/renovate/kotlinx-coroutines-monorepo
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-test to v1.10.1
2024-12-20 16:46:48 +00:00
renovate[bot]
153e2dcfb5
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-test to v1.10.1
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 16:31:35 +00:00
Marcel Hibbe
c86769d0e3
Merge branch 'master' into master
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-12-20 17:14:33 +01:00
Marcel Hibbe
74da67210d
resolve detekt warnings 2024-12-20 15:44:24 +01:00
Marcel Hibbe
cd50115e06
fix detekt warnings
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-12-20 14:59:25 +01:00
sowjanyakch
74bf9f2e91
hide replacement view when there is no replacement set
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:53 +01:00
sowjanyakch
f7078990d9
use constants
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:53 +01:00
sowjanyakch
65cb31b1e7
ktlintFormat
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:53 +01:00
sowjanyakch
8ca769832d
use theming from server
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:53 +01:00
sowjanyakch
3eab18472f
format code and remove unused colors
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:53 +01:00
sowjanyakch
cadb12cd0f
join 1:1 conversation with replacement user
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:52 +01:00
sowjanyakch
9a481aefc8
create chip for avatar icon and name
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:52 +01:00
sowjanyakch
ca4ace687c
use proper color for out of office view
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:52 +01:00
sowjanyakch
a9168b3f9d
format code
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:52 +01:00
sowjanyakch
27538a77ff
remove unused namespace declaration
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:52 +01:00
sowjanyakch
e7c540870b
ui changes to out_of_office_view
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:52 +01:00
sowjanyakch
4bdedfbc0d
show userAbsence period
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:51 +01:00
sowjanyakch
ecd5bfdf41
apply styling
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:51 +01:00
sowjanyakch
c9d5bc68a2
show replacement only if the user set a replacement
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:51 +01:00
sowjanyakch
083f0de063
use proper naming
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:51 +01:00
sowjanyakch
f7f73136d8
modify data class UserAbsenceData
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:51 +01:00
sowjanyakch
07accbb2b9
Use conversation name as userId in API call
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:51 +01:00
sowjanyakch
e6e294096b
call API only when status is in DND mode
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:50 +01:00
sowjanyakch
10e88f1e17
display out of office message in ChatActivity
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:50 +01:00
sowjanyakch
6bcd24bf56
add out_of_office_view.xml
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:50 +01:00
sowjanyakch
24ca0d6def
Modify ViewModel and Repository
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:50 +01:00
sowjanyakch
8fdd1478bf
add model
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-20 10:59:49 +01:00
renovate[bot]
f540510aaf
fix(deps): update dependency org.jetbrains.kotlinx:kotlinx-coroutines-test to v1.10.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-19 21:00:33 +00:00
Giacomo Pacini
c3aef0286a
run ./gradlew ktlintFormat
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 15:26:11 +01:00
Giacomo Pacini
fce785c734
spacing
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:21 +01:00
Giacomo Pacini
20a94f0ef3
spacing
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:20 +01:00
Giacomo Pacini
4fa06520ea
actually allows to play in background consecutive voice messages
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:20 +01:00
Giacomo Pacini
169dac4045
spacing
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:20 +01:00
Giacomo Pacini
09925699b7
added a boolean backgroundPlayAllowed, so that startPlayback continues only when that parameter is true. It is set to true only when it is called to play a consecutive voice message.
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:20 +01:00
Giacomo Pacini
7542b310e0
use Log.error instead of e.printstacktrace()
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:20 +01:00
Giacomo Pacini
d4b02a4a89
minor fixes
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:19 +01:00
Giacomo Pacini
deab1d10e1
fetches both previous and next voice messages
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:19 +01:00
Giacomo Pacini
6a598357fc
when a voice message is played, starts the download of the next ones if any, computes their durations and starts playing the next one at the end of the current. Plays a doodle between them
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:19 +01:00
Giacomo Pacini
410b27b72c
when the voice message duration is known, always shows it when not playing
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:18 +01:00
Giacomo Pacini
053407f900
fixed a bug that cut the last part of every voice messages. i.e. An audio message whose duration is 5.9 seconds was played for 5 seconds
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:18 +01:00
Giacomo Pacini
c0948ba478
voice messages that are played for at least a threshold are coloured differently
Signed-off-by: Giacomo Pacini <giacomopacini98@gmail.com>
2024-12-19 14:18:04 +01:00
Nextcloud bot
c754ce48d4
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-19 03:03:52 +00:00
Nextcloud bot
a627beec1a
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-18 03:37:41 +00:00
renovate[bot]
2d8aa2dbe1
fix(deps): update dependency org.junit.vintage:junit-vintage-engine to v5.11.4
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 16:21:00 +00:00
Nextcloud Android Bot
d512eed803 Weekly 21.0.0 Alpha 05 2024-12-16 03:12:01 +00:00
renovate[bot]
e902b6f58e
fix(deps): update dependency com.mebigfatguy.fb-contrib:fb-contrib to v7.6.9
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-15 01:20:22 +00:00
Nextcloud bot
7b43438539
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-14 03:01:31 +00:00
Andy Scherzinger
d2778b2ce1
style: Fix formatting
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-13 18:31:38 +01:00
Andy Scherzinger
8d0c6b0ce3
style(detekt): Restrict the number of return statements in methods
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-13 18:24:30 +01:00
Andy Scherzinger
f549870d3b
style(detekt): Shorten methods
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-13 16:21:42 +01:00
Andy Scherzinger
279bd8ade7
fix(lint): Move suppressions due to refactoring
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-13 15:35:18 +01:00
Andy Scherzinger
44badccad2
style(ktlint): Fix formatting
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-13 15:35:18 +01:00
Andy Scherzinger
383bf2a728
style(detekt): Shorten methods
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-13 15:35:17 +01:00
Andy Scherzinger
b0c86cac6c
style(detekt): Move magic number to constant
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-13 15:35:17 +01:00
sowjanyakch
49c717c020
show set remainder in federated conversation
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-13 13:44:02 +01:00
Marcel Hibbe
f41efd9303
Merge pull request #4497 from nextcloud/add_clear_icon
Add clear icon for search view in open conversations
2024-12-13 13:04:56 +01:00
Nextcloud bot
55dc98b26d
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-13 03:02:26 +00:00
github-actions[bot]
a2028d1f03
Merge pull request #4541 from nextcloud/renovate/androidx.compose-compose-bom-2024.x
fix(deps): update dependency androidx.compose:compose-bom to v2024.12.01
2024-12-11 23:29:56 +00:00
github-actions[bot]
fc5c3b1aba
Merge pull request #4540 from nextcloud/renovate/androidx.compose.ui-ui-test-junit4-1.x
fix(deps): update dependency androidx.compose.ui:ui-test-junit4 to v1.7.6
2024-12-11 23:25:35 +00:00
renovate[bot]
6f762f0636
fix(deps): update dependency androidx.compose:compose-bom to v2024.12.01
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 23:04:41 +00:00
renovate[bot]
b2ce3db09f
fix(deps): update dependency androidx.compose.ui:ui-test-junit4 to v1.7.6
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 23:03:56 +00:00
renovate[bot]
2dc1f38619
fix(deps): update androidxcameraversion to v1.4.1
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 23:02:41 +00:00
renovate[bot]
c9c983a10a
fix(deps): update dependency androidx.compose.runtime:runtime to v1.7.6
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 21:36:30 +00:00
sowjanyakch
bda0531362
use string resource
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-11 13:44:58 +01:00
sowjanyakch
a504f53b3a
use TextInputLayout
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-11 13:44:57 +01:00
rapterjet2004
1c108c94f7
Fixed overlay bug
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2024-12-10 10:05:56 +01:00
Marcel Hibbe
cbce4e9cd4
Merge pull request #4522 from nextcloud/remove_hilt_dependency
remove hilt dependency
2024-12-10 10:04:58 +01:00
sowjanyakch
46e8201ca2
remove hilt dependency
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-10 09:28:58 +01:00
sowjanyakch
c32d6a5bdf
remove unused models
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-10 09:22:26 +01:00
sowjanyakch
1d9f6e0e41
refactor code - remove comments
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-10 09:22:25 +01:00
sowjanyakch
3216318ccd
suppress lint warning for invalid string format
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-10 09:22:25 +01:00
sowjanyakch
0111e0f711
ktlintFormat
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-10 09:22:25 +01:00
sowjanyakch
5b8b3bb027
Modify Adapter and ListOpenConversationsActivity
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-10 09:22:25 +01:00
sowjanyakch
b769a024c4
Modify ViewModel
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-12-10 09:22:25 +01:00