Commit Graph

363 Commits

Author SHA1 Message Date
Marcel Hibbe
5219eeb11f
replace userManager.currentUser usage by currentUserProvider usage
userManager.currentUser was called too often. I was not able to prove that a bug is related to it but i think it may fix some hidden bugs.

CurrentUserProviderImpl is now used throughout the code to access the current user.
userManager.currentUser is only used from CurrentUserProviderImpl whenever the _currentUser was null (should only happen on app startup)

To avoid multiple initialization of CurrentUserProviderImpl it was changed to be a @Singleton

The handling should soon be replaced with coroutine flows. However for the v21.0.0 release it's still done with RxJava to avoid bugs.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-02-07 13:13:38 +01:00
sowjanyakch
f02257d5ff
add team support for mentions
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2025-02-07 09:34:45 +01:00
Marcel Hibbe
09a6cfb68b
avoid duplicated messages after sending
It could happen that when sending a message it was received on server but if the servers response is not received, the retry was triggered in the talk app.
This sometimes happened when internet connection was not the best.

Best would be that messages with the same referenceId would be refused on server side, but this won't be the case for now. So messages with the same referenceId are NOT refused as this would be too much overhead as there would be additional queries on server for every received message)

For now, the automatic retry logic is just removed so duplicated messages won't be created automatically.
However it's still possible to manually trigger the retry via button. In this case it is not guaranteed that there won't be duplicates.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-02-05 15:56:42 +01:00
Marcel Hibbe
3330fc8210
fix shimmer and "offlineNoMessages"-info handling
when being offline and no messages are set -> hide shimmer

when messages are received -> hide shimmer and "offlineNoMessages"-info

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-23 09:45:02 +01:00
Julius Linus
1ac537be94
Merge pull request #4641 from nextcloud/bugfix/4605/fixDuplicateMessages
Bugfix/4605/fix duplicate messages
2025-01-22 11:29:15 -06:00
Marcel Hibbe
4f49deadf2
Merge pull request #4630 from nextcloud/bugfix/4628/noUnreadMessagesBubbleForInvisibleMessages
no "unread messages" popup for invisible messages
2025-01-22 16:57:08 +00:00
Marcel Hibbe
9b6b01254a
remove scope cancelation for handleChatOnBackPress (replace with lifecyle event)
handleOnStop will handle this (and more scenarios than just backpress)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-22 13:59:03 +01:00
Marcel Hibbe
1f105d44d3
check if scope is active during long polling
Because long polling may have to be informed that the scopep was cancelled, the isActive checks are added so it can't happen that messages are added when they shouldn't.

I could not reproduce the scenario, anyway the checks should make sense in my opinion.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-22 13:54:31 +01:00
Marcel Hibbe
b6e341bbf1
cancel scope when onStop is reached
This is necessary especially to cancel the long polling when configuration change was made, e.g. screen was rotated. Otherwise multiple long polling requests would be running after configuration changes.

Because it not possible to launch a new coroutine in a scope that was canceled, it is necessary to re-initialize the scope.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-22 13:50:30 +01:00
Marcel Hibbe
5535bed35c
no "unread messages" popup for invisible messages
if chatMessageList is empty after handleSystemMessages it makes no sense to call the following methods.
Also processMessagesFromTheFuture was executed which caused that the popup was shown.

A better solution for the future should be to handle(remove) the "to-hide" system messages already in the repo or viewmodel

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-17 14:09:58 +01:00
Marcel Hibbe
20612c8543
avoid shimmer animations overlay with chat messages
The idea to show the progress bar (aka shimmer animation) was that it show not be shown at all if loading messages happens in less than a second (this was a better UX in my opinion).

The idea was to hide the progress bar when
ChatMessageStartState was triggered.

However there can be moment when adapter is still empty after ChatMessageStartState and if in this moment the DELAY_TO_SHOW_PROGRESS_BAR is reached before the adapter is actually filled, the overlay happens.
It could be a solution to move the hiding of the progress bar, however then special cases might have to be handled.

For simplicity, the logic for DELAY_TO_SHOW_PROGRESS_BAR is removed. Progress bar is always shown without a delay so it wont be triggered on a later moment and can't overlay the chat.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-17 13:40:57 +01:00
Marcel Hibbe
6e1114d4d8
fix TooManyRequestsException
By using
networkMonitor.isOnline.first()
the function
unregisterNetworkCallback
was triggered, which sometimes causes the ConnectivityManager$TooManyRequestsException.

So each time isOnline.first() was called, the callbackFlow would:
- Register a new NetworkCallback.
- Emit a value and cancel the flow.
- Unregister the NetworkCallback.

The exception was:
Exception android.net.ConnectivityManager$TooManyRequestsException:
  at android.net.ConnectivityManager.convertServiceException (ConnectivityManager.java:3771)
  at android.net.ConnectivityManager.sendRequestForNetwork (ConnectivityManager.java:3960)
  at android.net.ConnectivityManager.sendRequestForNetwork (ConnectivityManager.java:3967)
  at android.net.ConnectivityManager.registerNetworkCallback (ConnectivityManager.java:4349)
  at android.net.ConnectivityManager.registerNetworkCallback (ConnectivityManager.java:4319)
  at com.nextcloud.talk.data.network.NetworkMonitorImpl$isOnline$1.invokeSuspend (NetworkMonitorImpl.kt:61)

To fix this, the cold flow from callbackFlow is converted to a StateFlow.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-16 13:50:51 +01: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
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
a58607b547
resolve detekt warnings
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
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
rapterjet2004
490cd32c25
Impl changes, unable to replicate 1.)
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
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
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
Marcel Hibbe
c86769d0e3
Merge branch 'master' into master
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-12-20 17:14:33 +01:00