Commit Graph

3369 Commits

Author SHA1 Message Date
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
rapterjet2004
63b9e41a16 or former one to one
Signed-off-by: Julius Linus julius.linus@nextcloud.com
2023-06-27 15:01:59 +02:00
rapterjet2004
d24bd9d6a2 WIP one-to-one behaves like mentioned
Signed-off-by: Julius Linus julius.linus@nextcloud.com
2023-06-27 15:01:59 +02:00
rapterjet2004
943286ddd6 migrating from material preferences to native, squashed commit
Signed-off-by: Julius Linus julius.linus@nextcloud.com
2023-06-27 14:53:18 +02:00
Andy Scherzinger
1b43d18566 finetune preferences for M3 - DRAFT
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-27 14:53:18 +02:00
rapterjet2004
76f5fe91f6 migrating from material preferences to native, squashed commit
Signed-off-by: Julius Linus julius.linus@nextcloud.com
2023-06-27 14:53:18 +02:00
rapterjet2004
8158eebb4f Bug fix of issue 2780
Signed-off-by: Julius Linus julius.linus@nextcloud.com
2023-06-23 14:31:08 -05:00
rapterjet2004
8a6fc63d56 WIP filtered items persist on resumed
Signed-off-by: Julius Linus julius.linus@nextcloud.com
2023-06-21 12:34:31 +02:00
Marcel Hibbe
fdde5d2667 add option to list open conversations
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-19 23:42:50 +02:00
Marcel Hibbe
527ba28651 Fix to show other errors than HttpException (e.g. ConnectException)
Fix theming

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-19 15:10:21 +02:00
Andy Scherzinger
5a25aa1450
remove unused code
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:57 +02:00
Andy Scherzinger
0246b584fb
Optimize themeing/layout for filtering
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:56 +02:00
rapterjet2004
73dce166b9
WIP filter conversations feature, added close button + detekt issues
Signed-off-by: Julius Linus julius.linus@nextcloud.com

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:56 +02:00
rapterjet2004
715cbedcfe
WIP filter conversations feature, implemented small fixes + license
Signed-off-by: Julius Linus julius.linus@nextcloud.com

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:56 +02:00
rapterjet2004
ffdae1552d
WIP filter conversations feature, can now search through filter
Signed-off-by: Julius Linus julius.linus@nextcloud.com

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:56 +02:00
rapterjet2004
a60fce05cd
WIP filter conversations feature, UI more responsive
Signed-off-by: Julius Linus julius.linus@nextcloud.com

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:56 +02:00
rapterjet2004
cc0fd41c90
WIP filter conversations feature, last minute ui changes
Signed-off-by: Julius Linus julius.linus@nextcloud.com

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:56 +02:00
rapterjet2004
b4719bcad3
WIP filter conversations feature, functionality finished
Signed-off-by: Julius Linus julius.linus@nextcloud.com

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:55 +02:00
rapterjet2004
d209083700
WIP filter conversations feature, UI finished
Signed-off-by: Julius Linus julius.linus@nextcloud.com

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 14:48:43 +02:00
Andy Scherzinger
e1da473f72 comment on empty function block
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-15 11:07:22 +02:00
Marcel Hibbe
cc391d889a
check if talk is available at server selection and if version is valid
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-12 09:49:25 +02:00
Marcel Hibbe
deb512af91
fix to show error message on server selection screen
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-12 09:49:24 +02:00
Marcel Hibbe
7a30940142
handle 426 upgrade required / handle 503 Service Unavailable (+maintenance mode)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-09 14:31:30 +02:00
Marcel Hibbe
7f51d45e9a
Align typing indicator to new concept
# Send start/stop typing
Send "Typing" every 10 sec when there was a change

Send stop typing:
- when input is deleted
- when there was no input during the 10s timer
- when on leaving room

# Receive start/stop typing
Clear typing for participant after 15s if no start typing-message was received.
Use userId instead sessionId to manage typing participants. This ensures participants are not shown multiple times when using multiple devices with the same user (multisession). To get the userId via websocket, SignalingMessageReceiver and WebSocketInstance had to be modified to pass the CallWebSocketMessage in case the signalingMessage.type is related to typing. Not sure if this is the best solution but didn't find any other way.

Typing is not handled when the userId is of the own user (this could happen when using multiple devices)

In case userId is null (which happens for guests), their sessionId is used as key for the typingParticipants map.

# Other
Disable setting for typing indicator when no HPB is used + Avoid crash in chat when no HPB is used.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-02 15:35:16 +02:00
Andy Scherzinger
832e2178e3
codacy: Avoid unused private fields such as 'TAG'
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-01 22:35:08 +02: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
d4379f3c89
codacy: Unused import
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-01 22:27:42 +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
Marcel Hibbe
bd23edc9a5
check if location of cached file makes sense
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-01 10:36:10 +02:00
Marcel Hibbe
d49441e036
get last part after "/" also for content uris
note that this doesn't prevent path traversal as uris can be decoded

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-06-01 10:30:25 +02:00
rapterjet2004
79f317d1e6 issue-3019
Signed-off-by: Julius Linus julius.linus@nextcloud.com
2023-05-26 13:20:22 -05:00
Marcel Hibbe
d127c5401a
fix new onBackPressed handling
this commit fixes bugs from d3056ff2825e53040ca49b86b84f91f73a3eb11c and 1185dcf17a99ca62efd32f8a53c298ec4fd6c4d0

fix onBackPressed handling to use OnBackPressedCallback

remove unnecessary onBackPressedCallback's when they only finished the activity

replaced some finishAffinity methods with finish

...

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 15:42:09 +02:00
Ezhil Shanmugham
dff9ea5651
Fixed intendation Signed-off-by: Ezhil Shanmugham ezhil56x.contact@gmail.com
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 15:42:09 +02:00
Ezhil Shanmugham
64fa8e830b
Made suggested changes in FullScreenImageActivity.kt, ConversationsListActivity.kt and in some files Signed-off-by: Ezhil Shanmugham ezhil56x.contact@gmail.com
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 15:42:09 +02:00
Ezhil Shanmugham
d4a4472968
Removed mistakenly added authorship Signed-off-by: Ezhil Shanmugham ezhil56x.contact@gmail.com
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 15:42:09 +02:00
Ezhil Shanmugham
8348792313
Fixed ktlint and detekt errors
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 15:42:09 +02:00
Ezhil Shanmugham
7b5caf5007
fixed deprecated onBackPressed Issue-#2961
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 15:42:04 +02:00
rapterjet2004
93da3a9c65
Making reply length a const
Signed-off-by: Julius Linus <julius.linus@nextcloud.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 10:40:28 +02:00
rapterjet2004
a926c27ae7
working on issue 3026
Signed-off-by: Julius Linus <julius.linus@nextcloud.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 10:40:28 +02:00
Andy Scherzinger
984c8bff5c
further improve formatting
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 10:19:36 +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
f7e5881d87
Fix any detekt formatting issues
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-24 09:38:56 +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
Julius Linus
528f1fd431
Merge branch 'master' into translate-message-mvvm-impl
Signed-off-by: Julius Linus <69230048+rapterjet2004@users.noreply.github.com>
2023-05-23 08:07:40 -05:00
Marcel Hibbe
0eac3a2d11
fix codacy warning
Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 12:10:18 +02:00
Marcel Hibbe
9a76ce7ccd
fix to close gap between typing indicator and message input
otherwise chat content was visible in between

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 12:06:02 +02:00
Marcel Hibbe
5a97e90a82
improve detekt score: avoid magicNumbers...
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 11:34:38 +02:00
Marcel Hibbe
61859f361a
convert ConversationMessageNotifier to kt
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 11:16:47 +02:00
Marcel Hibbe
68799cfa24
avoid lint warning
..."Resource IDs will be non-final by default in Android Gradle Plugin version 8.0, avoid using them as annotation attributes" by using @KeyByString

keys were also wrong by copy&paste and are now fixed

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:31 +02:00
Marcel Hibbe
f0a9a302bb
make typing indicator two lines if necessary
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:31 +02:00
Marcel Hibbe
7b12f27a1a
move typing indicator methods
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:31 +02:00
Marcel Hibbe
fa4d02e2c6
send stoppedTyping signaling message when sending chat message
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:31 +02:00
Marcel Hibbe
add5e518e1
use height from typingIndicator layout
no need to define it redundant...

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:30 +02:00
Marcel Hibbe
231cfef8c3
check capabilities to use/ignore typing indicators
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:30 +02:00
Marcel Hibbe
d3d8e2abef
add setting to toggle typing status privacy
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:30 +02:00
Marcel Hibbe
0d6e971c38
fix to use newest capabilities to update settings.
Without this refreshing of capabilites, depending settings (for now read privacy) were never updated until app was started again because the user still contained old capabilities.

This fix will also be necessary for the typing indicator setting.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:30 +02:00
Marcel Hibbe
ecec266765
improve typing indicator design
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:30 +02:00
Marcel Hibbe
6adca2395d
add handling for multiple typing participants
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:29 +02:00
Marcel Hibbe
85f637ca8a
WIP. update UI when typing message received
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:29 +02:00
Marcel Hibbe
50e7af4d04
add timer for typing logic
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:29 +02:00
Marcel Hibbe
16d2d3d693
add timer for typing logic
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:29 +02:00
Marcel Hibbe
6228ec8d75
add sending of "typing" signaling messages
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:28 +02:00
Marcel Hibbe
8997c3b5c7
add receiving of "typing" signaling messages
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:28 +02:00
Marcel Hibbe
05b57dc4c7
rename controller_chat.xml to activity_chat.xml
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-23 10:49:28 +02:00
Julius Linus
480ad8941b
Update TranslateViewModel.kt
codacy error dix

Signed-off-by: Julius Linus <69230048+rapterjet2004@users.noreply.github.com>
2023-05-22 13:12:36 -05:00
rapterjet2004
5a18a05654 fixing detekt errors :|
Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-05-22 11:47:14 -05:00
rapterjet2004
00f86144d8 rewriting translate feature to use MVVM
Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-05-22 11:18:21 -05:00
rapterjet2004
c62a904c82 WIP rewriting translate feature to use MVVM
Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2023-05-19 17:12:37 -05:00
Andy Scherzinger
8a8f6d4e71
Add copy to clipboard action and fix layout issues for landscape mode while loading
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 23:31:00 +02:00
Andy Scherzinger
f9e1b40a0d
improve code formatting
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 23:10:07 +02:00
rapterjet2004
7f33b7fdfd issue 2931 - follow up fixes
Signed-off-by: Julius Linus <juliuslinus1@gmail.com>
2023-05-17 15:43:08 -05:00
Andy Scherzinger
b779a01c27
extract URL creation and shift paramters to retrofit API
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 18:59:04 +02:00
Andy Scherzinger
325be4b9f6
Optimze translation layout with specific landscape layout and use of autocomplete fields instead of spinner
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 15:39:46 +02:00
Andy Scherzinger
cff28de8b1
hide translation option of no target languages available
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 13:17:34 +02:00
Andy Scherzinger
e4f94dbcfd
Only show translation menu item for text messages
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 12:16:33 +02:00
Andy Scherzinger
6adf741dc1
Fix detekt issues
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 12:11:01 +02:00
Andy Scherzinger
f1805c9ddd
convert further strings to be translatable and unify logging tag
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 11:29:55 +02:00
Andy Scherzinger
98690a02d1
Makes dialog strings translatable and move to themed Material dialog
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 11:12:15 +02:00
Andy Scherzinger
ac0f8608a7
Add licence headers and optimize/theme translation layout
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 10:53:52 +02:00
rapterjet2004
5bc0f82398
issue 2931 progress - final push I hope
Signed-off-by: Julius Linus <juliuslinus1@gmail.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 10:53:52 +02:00
rapterjet2004
0f8aa7f9e6
issue 2931 progress - pretty much done with the functionality, just got a couple small adjustments
Signed-off-by: Julius Linus <juliuslinus1@gmail.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 10:53:52 +02:00
rapterjet2004
c6eacd30ea
issue 2931 progress - finally got most functionality + looks decent
Signed-off-by: Julius Linus <juliuslinus1@gmail.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 10:53:52 +02:00
rapterjet2004
b91e17ca3d
issue 2931 progress
Signed-off-by: Julius Linus <juliuslinus1@gmail.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 10:53:52 +02:00
rapterjet2004
9e9c6e81b9
issue 2931 progress
Signed-off-by: Julius Linus <juliuslinus1@gmail.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 10:53:52 +02:00
rapterjet2004
0168be395a
issue 2931 progress
Signed-off-by: Julius Linus <juliuslinus1@gmail.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 10:53:52 +02:00
rapterjet2004
8cdd8e9d8f
issue 2931 progress
Signed-off-by: Julius Linus <juliuslinus1@gmail.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-17 10:53:52 +02:00
Marcel Hibbe
6be93ad2cd
fix to keep entered text when app is in background
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-12 15:54:57 +02:00
Marcel Hibbe
998f6c11d9
fix conversation avatars for NC26
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-05 15:08:31 +02:00
Marcel Hibbe
cafb8b649a
send call reactions
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-04 16:49:47 +02:00
Marcel Hibbe
6d735dd537
show call reactions from other participants
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-04 16:49:46 +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
Andy Scherzinger
2ce57f4956
Merge pull request #2997 from nextcloud/feature/noid/emojiAvatars
hide delete button if no custom avatar is set
2023-05-04 16:39:11 +02:00
Daniel Calviño Sánchez
efab4cb664
Handle raised hands from the call participants rather than the signaling
Although listening from the signaling was working fine and this
unfortunately adds a lot of extra code it is conceptually "more
correct", as the UI should not directly deal with the signaling if there
is a higher abstraction available. Nevertheless, this should ease adding
other similar changes, like reactions.

Note that although there were already listeners for
CallParticipantModel.Observer in the CallActivity they were not reused,
as they handle totally unrelated things.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2023-05-04 15:15:36 +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
579b3b5ab4
handle emoji avatars
hide delete option from conversation info edit view if no custom avatar is set

remove themed avatars (This is the price of being able to have emoji avatars)

fix dark mode url

remove avatarVersion from url if it's null

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-04 14:43:29 +02:00
Marcel Hibbe
7518fdbcd9
fix screen locking feature
Since most controllers were replaced by activities, the screen locking was temporarily broken. This commit fixes the screen locking to also work with the activities.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-04 10:33:11 +02:00
Marcel Hibbe
b2e75a070c
remove userManager!!.users.subscribe for "share to"
i don't know why this was necessary in the past (inside the MainActivity). It works without as well.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 19:17:32 +02:00
Marcel Hibbe
6c2c15cd89
fix shareTo feature
it was broken since ConversationsList was migrated to Activity

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 19:17:32 +02:00
Andy Scherzinger
248aa69be7
Reformat java code
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-05-01 17:04:31 +02:00
Marcel Hibbe
1301d627dd
remove conversation avatar from chatActivity.
only show users avatars.
conversation avatars were removed again for now, because this would need more work to add custom view to the supportActionBar in order to show themed drawables.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:28 +02:00
Marcel Hibbe
28046c2492
WIP. add themed placeholders for conversationAvatars
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:28 +02:00
Marcel Hibbe
050f0f4422
fix to show placeholder avatar when none is set by user
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:27 +02:00
Marcel Hibbe
898728cef9
use cache for user avatars again (ignore flickering)
in the future, avatarVersion might be available for user avatars as well..

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:27 +02:00
Marcel Hibbe
d560a4a2a9
use avatar version of conversations to avoid unnecessary reloading/flickering
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:27 +02:00
Marcel Hibbe
0b5f38f232
use icons for profile edit appbar
to use same design as for conversation info editing

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:26 +02:00
Marcel Hibbe
260452234b
rename packages, add license comments
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:26 +02:00
Marcel Hibbe
9ced54986d
only reload 1:1 conversation avatars in conversation list on initial loading, else use from cache
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:26 +02:00
Marcel Hibbe
c641d51eec
use dark avatars for dark mode in ChatActivity
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:26 +02:00
Marcel Hibbe
e2c7d570fc
avoid UninitializedPropertyAccessException for optionsMenu
otherwise:

E  FATAL EXCEPTION: main
    Process: com.nextcloud.talk2, PID: 13169
    io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | kotlin.UninitializedPropertyAccessException: lateinit property optionsMenu has not been initialized
    	at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
    	at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:126)
    	at android.os.Handler.handleCallback(Handler.java:942)
    	at android.os.Handler.dispatchMessage(Handler.java:99)
    	at android.os.Looper.loopOnce(Looper.java:226)
    	at android.os.Looper.loop(Looper.java:313)
    	at android.app.ActivityThread.main(ActivityThread.java:8757)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
    Caused by: kotlin.UninitializedPropertyAccessException: lateinit property optionsMenu has not been initialized
    	at com.nextcloud.talk.conversation.info.ConversationInfoActivity.showOptionsMenu(ConversationInfoActivity.kt:214)
    	at com.nextcloud.talk.conversation.info.ConversationInfoActivity$fetchRoomInfo$1.onNext(ConversationInfoActivity.kt:670)
    	at com.nextcloud.talk.conversation.info.ConversationInfoActivity$fetchRoomInfo$1.onNext(ConversationInfoActivity.kt:652)
    	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:226) 
    	at android.os.Looper.loop(Looper.java:313) 
    	at android.app.ActivityThread.main(ActivityThread.java:8757) 
    	at java.lang.reflect.Method.invoke(Native Method) 
    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) 
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067) 

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:25 +02:00
Marcel Hibbe
effbd28f5d
remove placeholder for loadAvatarInternal
this looks smoother when loading the avatars (less flickering)
"error" and "fallback" take over if something goes wrong.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:25 +02:00
Marcel Hibbe
6b98a19294
change CachePolicy for replace to WRITE_ONLY
this seems to avoid that on a second load without to use replace, an old image from cache is loaded

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:25 +02:00
Marcel Hibbe
b4256e57c9
only reload avatars in conversation list on initial loading, else use from cache
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:24 +02:00
Marcel Hibbe
2ecea9e569
ignore cache when replacing image
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:24 +02:00
Marcel Hibbe
c880378ac0
fix to always load newest avatar image for chat (disable cache)
also disable placeholder (otherwise it's flickering on every load)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:23 +02:00
Marcel Hibbe
076b9b2aef
pass "replace" as parameter to load*Avatar methods
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:23 +02:00
Marcel Hibbe
5a56d8c614
Fix to not load user avatar for conversation
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:23 +02:00
Marcel Hibbe
dd4b797ef8
show conversation avatars in chat appbar
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:23 +02:00
Marcel Hibbe
6152fa50fe
Add editing of conversation name and description
Improvements to be done:
MVVM
emoji picker
horizontal design

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:23 +02:00
Marcel Hibbe
b43a31a4ca
Restrict edit conversation view to admins
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:22 +02:00
Marcel Hibbe
1368f70d1f
Add system messages for avatar set/removed
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:22 +02:00
Marcel Hibbe
3dc3bf0cf8
WIP: add new screen for conversation info editing
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:22 +02:00
Marcel Hibbe
84008a40dc
add editing mode for conversation avatar
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:22 +02:00
Marcel Hibbe
dc09f21870
add capability check for conversation avatar
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:21 +02:00
Marcel Hibbe
5870a30410
fix avatar buttons color
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:21 +02:00
Marcel Hibbe
797c062981
refactor (move methods)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:21 +02:00
Marcel Hibbe
d6cec7f6b7
Add fun to delete conversation avatar
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:21 +02:00
Marcel Hibbe
0063fa8c10
Fix key name to upload conversation avatars
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:20 +02:00
Marcel Hibbe
fdb845d298
WIP: Add conversation avatar options in conversation info
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:20 +02:00
Marcel Hibbe
87c53979c4
Use avatars from server (depending on light/dark mode)
Placeholder avatars now also come from the server. This means themed avatars from the android app itself are no longer used here. The static placeholder icons defined in loadConversationAvatar are only used when the http request fails completely.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:20 +02:00
Marcel Hibbe
ed4fa3690d
Use avatars from server (depending on light/dark mode)
Placeholder avatars now also come from the server. This means themed avatars from the android app itself are no longer used here. The static placeholder icons defined in loadConversationAvatar are only used when the http request fails completely.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:20 +02:00
Marcel Hibbe
ad15bca8ec
WIP: use placeholders when avatar is not available
Problem:
i want to load avatars and if no avatar is received, i want to show the placeholder.
However with coil it's not possible to make the placeholders rounded. See https://github.com/coil-kt/coil/issues/37

I could just set the old rounded drawables that we have, but then theming wouldn't work!

So i ask myself what the best solution could be:

- Somehow check beforehand if an avatar is set at all? and then choose between loading the avatar or loading the the static drawables in their own loading request.

- Somehow check if the avatar response is empty. And if yes, make another request to load the static drawables.

- Use jetpack compose instead of coil to clip the image? See https://stackoverflow.com/questions/66014834/how-to-draw-a-circular-image-in-android-jetpack-compose

- create new svg's? Somehow it should be possible to invert a circle and just overlay it over an image..?

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:19 +02:00
Marcel Hibbe
c3b468118a
WIP: show conversation avatar
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:19 +02:00
Marcel Hibbe
60534aca61
change image picker code for activity instead controller
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-05-01 12:25:19 +02:00
Tim Krüger
f44c528b4f
Move image picker logic to new class 'PickImage'
This is a preparation to solve issue #2555 and centralize the image picker
functionality.

See: #2555

Signed-off-by: Tim Krüger <t@timkrueger.me>
2023-05-01 12:25:19 +02:00
Marcel Hibbe
eab052d2ac
Delete unused methods
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-26 09:53:19 +02:00
Marcel Hibbe
1e87fe9b69
Fix wrong parsing of capability values
This fixes bugs that were introduced with https://github.com/nextcloud/talk-android/pull/2963

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-26 09:53:19 +02:00
Andy Scherzinger
30e4698c1a
Parse value as String which should work for old values (Strings) and new Values (Boolean)
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-04-26 09:53:18 +02:00
Marcel Hibbe
e362e8e3d0
Handle new capabilities json structure
Because of "supported-reactions" and "predefined-backgrounds" the capabilities cannot be parsed with
`var config: HashMap<String, HashMap<String, String>>?`

As a result it was not possible to login into the app.

This is now
`var config: HashMap<String, HashMap<String, @RawValue @Contextual Any>>?` while always checking for the type when accessing the values.

"supported-reactions" and "predefined-backgrounds" are not handled yet.
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-21 17:29:53 +02:00
Marcel Hibbe
ae9e9924e6
Fix to open conversation list when navigating back after chat was opened by notification
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-21 13:30:25 +02:00
Andy Scherzinger
12a9f9b159
add support for group mentions
Resolves #2860

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-04-19 12:05:54 +02:00
Andy Scherzinger
cd38c8dbb6
lint: move from resource IDs to fixed, unique Int values for view types
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-04-14 22:07:00 +02:00
Andy Scherzinger
f52fd59125
move array to list
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-04-14 20:04:22 +02:00
Andy Scherzinger
584947c8e3
Improve theming for toolbars
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-04-09 21:38:05 +02:00
Marcel Hibbe
28a235ae45
Add todos
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-09 12:16:49 +02:00
Marcel Hibbe
9c9259b730
Add temporary workarounds until conductor is removed
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-09 12:16:49 +02:00
Marcel Hibbe
1246223859
Fix to add account (temp solution until conductor is removed)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-09 12:16:49 +02:00
Marcel Hibbe
aa1e93db05
WIP. Replace Controller with Activity for ConversationList
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-09 12:16:49 +02:00
Marcel Hibbe
c34e656eca
Fix to scroll to first unread message
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 17:01:26 +02:00
Marcel Hibbe
48a4fbc3cc
Reimplement breakout rooms for usage of Activity instead of Controller
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:42 +02:00
Marcel Hibbe
68b930a0d9
remove ConductorRemapping.kt
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:42 +02:00
Marcel Hibbe
f9836da4a8
fix to start voice message playback only when activity is visible
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:42 +02:00
Marcel Hibbe
f7529446a4
remove unused item from onOptionsItemSelected
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:41 +02:00
Marcel Hibbe
9e66c3192c
fix to open chat via bottom menu
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:41 +02:00
Marcel Hibbe
708beabe9d
setup adapter in onCreate + extract some functions from onResume
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:41 +02:00
Marcel Hibbe
0b0387115e
fix to open poll dialog
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:40 +02:00
Marcel Hibbe
52266a5632
fix NPE when quoted message is expired or deleted
for now the message is shown empty. should be improved!

D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.nextcloud.talk2, PID: 29567
    java.lang.NullPointerException
        at com.nextcloud.talk.models.json.chat.ChatMessage.getText(ChatMessage.kt:264)
        at com.nextcloud.talk.adapters.messages.OutcomingTextMessageViewHolder.processParentMessage(OutcomingTextMessageViewHolder.kt:168)
        at com.nextcloud.talk.adapters.messages.OutcomingTextMessageViewHolder.onBind(OutcomingTextMessageViewHolder.kt:100)
        at com.nextcloud.talk.adapters.messages.OutcomingTextMessageViewHolder.onBind(OutcomingTextMessageViewHolder.kt:54)
        at com.stfalcon.chatkit.messages.MessageHolders.bind(MessageHolders.java:596)
        at com.stfalcon.chatkit.messages.MessagesListAdapter.onBindViewHolder(MessagesListAdapter.java:110)
        at com.nextcloud.talk.adapters.messages.TalkMessagesListAdapter.onBindViewHolder(TalkMessagesListAdapter.java:50)
        at com.nextcloud.talk.adapters.messages.TalkMessagesListAdapter.onBindViewHolder(TalkMessagesListAdapter.java:32)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7678)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7761)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6582)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6848)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6688)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6684)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2362)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1662)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1622)
        at androidx.recyclerview.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1425)
        at androidx.recyclerview.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1158)
        at androidx.recyclerview.widget.RecyclerView.scrollStep(RecyclerView.java:2009)
        at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5789)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1301)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1309)
        at android.view.Choreographer.doCallbacks(Choreographer.java:923)
        at android.view.Choreographer.doFrame(Choreographer.java:847)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1283)
        at android.os.Handler.handleCallback(Handler.java:942)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:226)
        at android.os.Looper.loop(Looper.java:313)
        at android.app.ActivityThread.main(ActivityThread.java:8741)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:40 +02:00
Marcel Hibbe
906c1f7529
fix to show avatar, fix onClick listener
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:40 +02:00
Marcel Hibbe
5fc69201fe
fix to open Conversation List for onBackPressed when switched chats
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-04-05 12:52:40 +02:00