Commit graph

3230 commits

Author SHA1 Message Date
Andy Scherzinger
55bb557b26
fix placeholder rendering for parent messages (replied to text)
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-08-07 12:52:32 +02:00
Julius Linus
1af04d2bd3 Follow up fixes
- Larger Bar gap
- Centered time below play/pause button
- Time is the same color as the play/pause button

Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-08-02 14:14:59 -05:00
Julius Linus
2430f725d6 AudioUtils and Waveform Seekbar
- Created AudioUtils for processing audio messages
- Created Waveform Seekbar, for visualizing a FloatArray
- Time limit of about 5 seconds, else shows regular seekbar
- Also made mediaPlayer smoother
- Fixed time discontinuity bug when playing voice messages, but only on API 28 or higher
Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-08-01 12:35:15 -05:00
Julius Linus
e5afa96e26 In this PR
- Drafts are now saved in between rooms.

Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-08-01 10:34:49 -05:00
Marcel Hibbe
8dd8f745cb show 1h call duration info when screen is reopenend
+ make call duration bold for >= 1hour

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-28 18:02:37 +02:00
Marcel Hibbe
8e93a1936b show call time and hint for one-hour call
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-28 18:02:37 +02:00
Marcel Hibbe
75c154acf3
Avoid to fetchSignalingSettings in onMicrophoneClick
this led to duplicated call of fetchSignalingSettings.
because it's already called from checkDevicePermissions().
From my pov it shouldn't be triggered in onMicrophoneClick() again, at least i can not think of any scenario and while testing everything worked as expected.

The duplicated call was there since ever(?), but after implementing #3216 this also caused the call duration timer to be run twice.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-28 13:46:28 +02:00
Andy Scherzinger
c4290f11ca
Implement respecting the markdown rendering flag
...and fixing the reply ellipsizing for any reply messages

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-28 10:31:46 +02:00
Andy Scherzinger
4b89ceeb54
Implement status infos on chat view
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-28 10:04:29 +02:00
Andy Scherzinger
efc8a1a2dd Fix some magic numbers, bump score
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-27 12:40:12 +02:00
Marcel Hibbe
a941945400 convert CallActivity to kotlin
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-27 12:40:12 +02:00
Marcel Hibbe
b5529f869a convert CallActivity to kotlin
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-27 12:40:12 +02:00
Andy Scherzinger
c0deca51b9
implement permission check for notifications on Android 13
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-26 23:01:38 +02:00
Marcel Hibbe
80af04be9a remove effortlessPermissions lib
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-25 14:35:37 +02:00
rapterjet2004
6654f6aa74 WIP
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2023-07-19 20:18:27 -05:00
rapterjet2004
21dbd65870 Fixed MicInputCloud + Detekt issues
Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-07-19 13:24:53 -05:00
Julius Linus
f0ba16a275
Issue 2790, allows for continuous voice recording on swipe up, and for previewing messages
- I did a bunch of UI logic in ChatActivity and view_message_input, mainly in setting up the recording interface
- I created a custom component, MicInputCloud, under the hood it's 3 ovals, with a hole cut in the center for the icon. The ovals are at around 50% opacity, and they each have their own rotations and size changes animated. General rotation speed and colors can be overridden by the activity implementing it.
- I also added a floating action button to activity_chat, to show when the voice recording is locked or not.
- I can replay or pause preview voice recordings before sending or deleting
- Preview voice recording is now smoother and click boxes are bigger and well defined
Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-07-19 11:42:41 +02:00
Marcel Hibbe
61ff44a643 add logging and minor refactoring
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-18 13:15:01 +02:00
Marcel Hibbe
4e52b7a7bd add checks to reconnect websocket
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-18 13:15:01 +02:00
Marcel Hibbe
2f32357b78 check if existing websocket is Connected
+ refactoring

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-18 13:15:01 +02:00
Julius Linus
bb45ebd3b8 Issue 3142
- Added duration of the voice message playing
- Fixed the seekbar bug, and made it more smoother

Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-07-14 11:32:15 -05:00
Andy Scherzinger
dcbc1771c6
remove ports from translatable strings
Resolves #3187

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-14 17:19:51 +02:00
Marcel Hibbe
e6a95d7190
fix typo in sessionId
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-13 16:02:55 +02:00
Marcel Hibbe
b0565f5149
check that session is the same before joining room locally without to send websocket message
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-13 16:00:59 +02:00
Marcel Hibbe
89aacbae95
fix typo
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-13 15:03:59 +02:00
Marcel Hibbe
d450ae7897
fix error message
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-13 15:03:08 +02:00
Marcel Hibbe
129606327e
set isConnected to false when websocket connection has been released
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-13 14:00:13 +02:00
Marcel Hibbe
8f3a3570e9
Add logging for websockets
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-13 13:32:43 +02:00
Marcel Hibbe
c3cb644558 Fix establishing of call connection when try to connect a second time on HPB
Everytime a second attempt was made to enter a call, the connection failed.
How to reproduce:

- Enter the ChatActivity
-> joins the room (so the new session is in the ApplicationWideCurrentRoomHolder)

- Start call
-> in the CallActivity we don't join again and instead execute callOrJoinRoomViaWebSocket()

- Call connection is successful

- Hangup on android
-> the ApplicationWideCurrentRoomHolder gets cleared (so also it's session)

- Staying in the chat and start the call another time
-> When we open CallActivity another time, ApplicationWideCurrentRoomHolder.sessionId is empty.Because of this, in joinRoomAndCall, joinRoom is executed again.
But as we are still in the room and have a session, joinRoom is problematic because on serverside in SignalingController - if there is still a session - it's considered as old.
So Nextcloud now sends a backend message (disinvite) to the external signaling controller that the session (of the first join) was removed.
So the External signaling server removes the session and closes the websocket. (The message for this might be improved, see https://github.com/strukturag/nextcloud-spreed-signaling/issues/512)

As the websocket is now closed, it won't be possible for the android app to send any signaling message anymore. There will just be the connecting screen and the call connection fails.

Solution for now:
ApplicationWideCurrentRoomHolder.getInstance().clear() should not be executed when hanging up, so the session won't be cleared and in the next attempt to start the call the room is not joined again mistakenly.
Instead to clear the `ApplicationWideCurrentRoomHolder`, only
setInCall(false);
setDialing(false);
are set so that the method isNotInCall() in ChatActivity remains working correctly.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-12 19:04:39 +02:00
Andy Scherzinger
78c5e5b6d9
remove table rendering
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-10 17:51:01 +02:00
Andy Scherzinger
fa8fd7b229
unify markdown rendering of chat messages
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-10 09:38:04 +02:00
Andy Scherzinger
d124301809
Implement text formatting via markdown rendering for text messages
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-10 09:38:00 +02:00
Marcel Hibbe
f2a89de624 fix to be able to enter open conversation name
without this change the continue button was broken (no room token -> response 404 for getRoom. But for creating an open conversation getRoom should not be executed at all) and the emoji button was missing

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-07 15:58:16 +02:00
Marcel Hibbe
edd2ce7805 avoid NPE in ProfileActivity because userInfo could be null
reported via gplay:

Exception java.lang.NullPointerException:
  at com.nextcloud.talk.profile.ProfileActivity$save$1.onError (ProfileActivity.kt:457)
  at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated (ObservableObserveOn.java:281)
  at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal (ObservableObserveOn.java:172)
  at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run (ObservableObserveOn.java:255)
  at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run (HandlerScheduler.java:124)
  at android.os.Handler.handleCallback (Handler.java:938)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:257)
  at android.app.ActivityThread.main (ActivityThread.java:8220)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:626)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1015)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-07 14:06:44 +02:00
Marcel Hibbe
74315a99a4 avoid ClassCastException on ItemLongClick in ConversationsListActivity
could happen when using long click on header when using the conversation search

Exception java.lang.ClassCastException:
  at com.nextcloud.talk.conversationlist.ConversationsListActivity.onItemLongClick (ConversationsListActivity.kt:1027)
  at eu.davidea.viewholders.FlexibleViewHolder.onLongClick (FlexibleViewHolder.java:144)
  at android.view.View.performLongClickInternal (View.java:8240)
  at android.view.View.performLongClick (View.java:8198)
  at android.view.View.performLongClick (View.java:8216)
  at android.view.View$CheckForLongPress.run (View.java:30194)
  at android.os.Handler.handleCallback (Handler.java:938)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8653)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:602)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-07 13:26:52 +02:00
Marcel Hibbe
fee6630b9c avoid ArrayIndexOutOfBoundsException when swiping to reply.
This does not fix the root cause. So probably position should not be -1 here.
However if it is -1, this commit avoids the following exception and swiping to reply simply won't work.

Exception java.lang.ArrayIndexOutOfBoundsException: length=163; index=-1
  at java.util.ArrayList.get (ArrayList.java:439)
  at com.nextcloud.talk.chat.ChatActivity$setupSwipeToReply$messageSwipeController$1.showReplyUI (ChatActivity.kt:1144)
  at com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback.setTouchListener$lambda$0 (MessageSwipeCallback.kt:137)
  at com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback.$r8$lambda$hYMm2zsKL8yVqo4e364Wb8cWEW8
  at com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback$$ExternalSyntheticLambda0.onTouch
  at android.view.View.dispatchTouchEvent (View.java:15046)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3115)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2788)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3121)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2802)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3121)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2802)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3121)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2802)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3121)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2802)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3121)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2802)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3121)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2802)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3121)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2802)
  at com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:500)
  at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1912)
  at android.app.Activity.dispatchTouchEvent (Activity.java:4299)
  at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:70)
  at com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:458)
  at android.view.View.dispatchPointerEvent (View.java:15309)
  at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:6778)
  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:6578)
  at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6034)
  at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:6091)
  at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:6057)
  at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:6222)
  at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:6065)
  at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:6279)
  at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6038)
  at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:6091)
  at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:6057)
  at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:6065)
  at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6038)
  at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:9206)
  at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:9157)
  at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:9126)
  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:9329)
  at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:267)
  at android.os.MessageQueue.nativePollOnce
  at android.os.MessageQueue.next (MessageQueue.java:335)
  at android.os.Looper.loopOnce (Looper.java:161)
  at android.os.Looper.loop (Looper.java:288)
  at android.app.ActivityThread.main (ActivityThread.java:7918)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:936)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-07 12:58:09 +02:00
Marcel Hibbe
b39daf4565 fix to handleActionFromContact
handleActionFromContact was not executed in onCreate of the MainActivity which is now fixed by this commit.

+ refactoring some intent handling

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-06 21:39:28 +02:00
Marcel Hibbe
2a6e10faa0 fix to allow empty map for phone-number users
com.nextcloud.talk2  E  Failed to searchContactsByPhoneNumber
    java.lang.NullPointerException: Parameter specified as non-null is null: method com.nextcloud.talk.models.json.search.ContactsByNumberOCS.setMap, parameter <set-?>
    	at com.nextcloud.talk.models.json.search.ContactsByNumberOCS.setMap(Unknown Source:2)
    	at com.nextcloud.talk.models.json.search.ContactsByNumberOCS$$JsonObjectMapper.parseField(ContactsByNumberOCS$$JsonObjectMapper.java:56)
    	at com.nextcloud.talk.models.json.search.ContactsByNumberOCS$$JsonObjectMapper.parse(ContactsByNumberOCS$$JsonObjectMapper.java:33)
    	at com.nextcloud.talk.models.json.search.ContactsByNumberOCS$$JsonObjectMapper.parse(ContactsByNumberOCS$$JsonObjectMapper.java:16)
    	at com.nextcloud.talk.models.json.search.ContactsByNumberOverall$$JsonObjectMapper.parseField(ContactsByNumberOverall$$JsonObjectMapper.java:40)
    	at com.nextcloud.talk.models.json.search.ContactsByNumberOverall$$JsonObjectMapper.parse(ContactsByNumberOverall$$JsonObjectMapper.java:30)
    	at com.nextcloud.talk.models.json.search.ContactsByNumberOverall$$JsonObjectMapper.parse(ContactsByNumberOverall$$JsonObjectMapper.java:13)
    	at com.bluelinelabs.logansquare.JsonMapper.parse(JsonMapper.java:52)
    	at com.bluelinelabs.logansquare.LoganSquare.parse(LoganSquare.java:69)
    	at com.github.aurae.retrofit2.LoganSquareResponseBodyConverter.convert(LoganSquareResponseBodyConverter.java:30)
    	at com.github.aurae.retrofit2.LoganSquareResponseBodyConverter.convert(LoganSquareResponseBodyConverter.java:16)
    	at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
    	at retrofit2.OkHttpCall.execute(OkHttpCall.java:204)
    	at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:46)
    	at io.reactivex.Observable.subscribe(Observable.java:12284)
    	at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:35)
    	at io.reactivex.Observable.subscribe(Observable.java:12284)
    	at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
    	at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:608)
    	at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
    	at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    	at java.lang.Thread.run(Thread.java:919)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-06 21:39:28 +02:00
Marcel Hibbe
5974278e84 fix IllegalArgumentException caused by missing theming
Exception java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
  at com.google.android.material.internal.ThemeEnforcement.checkTheme (ThemeEnforcement.java:247)
  at com.google.android.material.internal.ThemeEnforcement.checkAppCompatTheme (ThemeEnforcement.java:212)
  at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme (ThemeEnforcement.java:147)
  at com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes (ThemeEnforcement.java:114)
  at com.google.android.material.textfield.TextInputLayout.<init> (TextInputLayout.java:472)
  at com.google.android.material.textfield.TextInputLayout.<init> (TextInputLayout.java:451)
  at com.google.android.material.textfield.TextInputLayout.<init> (TextInputLayout.java:447)
  at com.nextcloud.talk.settings.SettingsActivity.askForPhoneNumber (SettingsActivity.kt:935)
  at com.nextcloud.talk.settings.SettingsActivity.access$askForPhoneNumber (SettingsActivity.kt:105)
  at com.nextcloud.talk.settings.SettingsActivity$checkForPhoneNumber$1.onNext (SettingsActivity.kt:915)
  at com.nextcloud.talk.settings.SettingsActivity$checkForPhoneNumber$1.onNext (SettingsActivity.kt:908)
  at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal (ObservableObserveOn.java:201)
  at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run (ObservableObserveOn.java:255)
  at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run (HandlerScheduler.java:124)
  at android.os.Handler.handleCallback (Handler.java:942)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loopOnce (Looper.java:211)
  at android.os.Looper.loop (Looper.java:300)
  at android.app.ActivityThread.main (ActivityThread.java:8294)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:580)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1028)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-06 21:39:28 +02:00
Andy Scherzinger
f3452127d3 improve detekt score
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-07-06 15:31:34 +02:00
Marcel Hibbe
c4fbc0ab05 solve detekt warnings
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-06 10:29:55 +02:00
Marcel Hibbe
c55539c50e solve lint warnings
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-06 10:29:55 +02:00
Marcel Hibbe
18d4d42e8f fix to refresh chat after conversation screen was in background.
without this fix, it could happen that pullChatMessagesPending remains true after the conversation screen was in background. As a result the check

if (pullChatMessagesPending) {
     Log.d(TAG, "pullChatMessages - pullChatMessagesPending is true, exiting")
     return
}

in pullChatMessages() always returns without to pull chat messages (so there was even no long-polling anymore).

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-06 10:29:55 +02:00
Marcel Hibbe
ac5061d8a4 fix to load conversationlist only once after login
without this fix:
after login the conversation list opened multiple times for the same user when other users already exist

reason:
proceedWithLogin() in AccountVerificationController is called multiple times because for ALL accounts (for (User user : userEntityObjectList)) the workers send their results via eventBus to

AccountVerificationController#onMessageEvent(eventStatus: EventStatus)

So depending on how many accounts exist, the ConversationList was loaded x times.

solution:
if internalAccountId is already the active one, no need to load the conversationList another time.

when there is only one account -> currentUser id and internalAccountId are the same so it would not enter the condition. Thus also allowing it when only one user exists.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-05 10:26:02 +02:00
Marcel Hibbe
e69a03a7ce fix long click in ChooseAccountDialogFragment
otherwise the list in the ConversationListActivity would handle it which results in unexpected user actions dialog popup

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-07-05 10:08:33 +02:00
Marcel Hibbe
64d0f0e2cd Fix to parse OpenAI translations.
The parsed result was without quotes which resulted in error:

Unterminated object at character 21 of [{fromLabel=English (US),

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-30 07:30:18 +02:00
Marcel Hibbe
817ea1ab64 Avoid to send conversation and user via intent
sending too much data via intent always is a bad pattern which can lead to TransactionTooLargeException.

When OpenAI translation is enabled, the capabilities contain a ton of translation combinations. These capabilities are contained in 'currentUser' as well in 'selectedConversation'. So, TransactionTooLargeException was thrown.

this PR:
- avoids passing too much data as parcelables in intents (esp. conversation and user)
- introduces MVVM patterns to load required data (esp conversation) from backend (for now via requests, in the future from database first)
- introduces ConversationModel which is created out of the Conversation json model
- loads user data via injection when possible
- creates some quickfixes in ConversationBottomDialog, EntryMenuController and OperationsMenuController.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-30 07:30:18 +02:00
Julius Linus
bfbf46df77 quick conversation info bug fix
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2023-06-29 20:59:47 +02:00
Julius Linus
fa5e0fb01d Can now open preview messages in the files app in message actions
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2023-06-29 09:54:02 +02:00
rapterjet2004
42c55cd5ac trivial formatting change to test checks
Signed-off-by: Julius Linus julius.linus@nextcloud.com
2023-06-27 15:01:59 +02:00