Browse Source

add ability to send emoji

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 3 years ago
parent
commit
f4ab037a44

+ 12 - 3
app/src/main/java/com/nextcloud/talk/api/NcApi.java

@@ -490,8 +490,17 @@ public interface NcApi {
     @GET
     Observable<StatusesOverall> getUserStatuses(@Header("Authorization") String authorization, @Url String url);
 
+
+    @POST
+    Observable<GenericOverall> sendReaction(@Header("Authorization") String authorization, @Url String url,
+                                 @Query("reaction") String reaction);
+
+    @DELETE
+    Observable<GenericOverall> deleteReaction(@Header("Authorization") String authorization, @Url String url,
+                                              @Query("reaction") String reaction);
+
     @GET
-    Observable<ReactionsOverall> getParticipantsForEmojiReaction(@Header("Authorization") String authorization,
-                                                                 @Url String url,
-                                                                 @Query("reaction") String reaction);
+    Observable<ReactionsOverall> getReactions(@Header("Authorization") String authorization,
+                                              @Url String url,
+                                              @Query("reaction") String reaction);
 }

+ 11 - 1
app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt

@@ -2438,7 +2438,8 @@ class ChatController(args: Bundle) :
                     message,
                     conversationUser,
                     currentConversation,
-                    isShowMessageDeletionButton(message)
+                    isShowMessageDeletionButton(message),
+                    ncApi!!
                 ).show()
             }
         }
@@ -2720,6 +2721,15 @@ class ChatController(args: Bundle) :
         adapter?.update(messageTemp)
     }
 
+    fun updateAdapterAfterSendReaction(message: ChatMessage, emoji: String) {
+        var amount = message.reactions[emoji]
+        if (amount == null){
+            amount = 0
+        }
+        message.reactions[emoji] = amount + 1
+        adapter?.update(message)
+    }
+
     private fun isShowMessageDeletionButton(message: ChatMessage): Boolean {
         if (conversationUser == null) return false
 

+ 54 - 8
app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt

@@ -21,25 +21,35 @@
 package com.nextcloud.talk.ui.dialog
 
 import android.os.Bundle
+import android.util.Log
 import android.view.View
 import android.view.ViewGroup
+import androidx.annotation.NonNull
 import com.google.android.material.bottomsheet.BottomSheetBehavior
 import com.google.android.material.bottomsheet.BottomSheetDialog
 import com.nextcloud.talk.BuildConfig
 import com.nextcloud.talk.R
+import com.nextcloud.talk.api.NcApi
 import com.nextcloud.talk.controllers.ChatController
 import com.nextcloud.talk.databinding.DialogMessageActionsBinding
-import com.nextcloud.talk.models.database.UserEntity
 import com.nextcloud.talk.models.database.CapabilitiesUtil
+import com.nextcloud.talk.models.database.UserEntity
 import com.nextcloud.talk.models.json.chat.ChatMessage
 import com.nextcloud.talk.models.json.conversations.Conversation
+import com.nextcloud.talk.models.json.generic.GenericOverall
+import com.nextcloud.talk.utils.ApiUtils
+import io.reactivex.Observer
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.disposables.Disposable
+import io.reactivex.schedulers.Schedulers
 
 class MessageActionsDialog(
     private val chatController: ChatController,
     private val message: ChatMessage,
     private val user: UserEntity?,
     private val currentConversation: Conversation?,
-    private val showMessageDeletionButton: Boolean
+    private val showMessageDeletionButton: Boolean,
+    private val ncApi: NcApi
 ) : BottomSheetDialog(chatController.activity!!) {
 
     private lateinit var dialogMessageActionsBinding: DialogMessageActionsBinding
@@ -73,22 +83,22 @@ class MessageActionsDialog(
     private fun initEmojiBar() {
         if (CapabilitiesUtil.hasSpreedFeatureCapability(user, "reactions")) {
             dialogMessageActionsBinding.emojiThumbsUp.setOnClickListener {
-                dismiss()
+                sendReaction(message, dialogMessageActionsBinding.emojiThumbsUp.text.toString())
             }
             dialogMessageActionsBinding.emojiThumbsDown.setOnClickListener {
-                dismiss()
+                sendReaction(message, dialogMessageActionsBinding.emojiThumbsDown.text.toString())
             }
             dialogMessageActionsBinding.emojiLaugh.setOnClickListener {
-                dismiss()
+                sendReaction(message, dialogMessageActionsBinding.emojiLaugh.text.toString())
             }
             dialogMessageActionsBinding.emojiHeart.setOnClickListener {
-                dismiss()
+                sendReaction(message, dialogMessageActionsBinding.emojiHeart.text.toString())
             }
             dialogMessageActionsBinding.emojiConfused.setOnClickListener {
-                dismiss()
+                sendReaction(message, dialogMessageActionsBinding.emojiConfused.text.toString())
             }
             dialogMessageActionsBinding.emojiSad.setOnClickListener {
-                dismiss()
+                sendReaction(message, dialogMessageActionsBinding.emojiSad.text.toString())
             }
             dialogMessageActionsBinding.emojiMore.setOnClickListener {
                 dismiss()
@@ -180,7 +190,43 @@ class MessageActionsDialog(
         }
     }
 
+    private fun sendReaction(message: ChatMessage, emoji: String) {
+        val credentials = ApiUtils.getCredentials(user?.username, user?.token)
+
+        ncApi.sendReaction(
+            credentials,
+            ApiUtils.getUrlForMessageReaction(
+                user?.baseUrl,
+                currentConversation!!.token,
+                message.id
+            ),
+            emoji
+        )
+            ?.subscribeOn(Schedulers.io())
+            ?.observeOn(AndroidSchedulers.mainThread())
+            ?.subscribe(object : Observer<GenericOverall> {
+                override fun onSubscribe(d: Disposable) {
+                }
+
+                override fun onNext(@NonNull genericOverall: GenericOverall) {
+                    val statusCode = genericOverall.ocs.meta.statusCode
+                    if (statusCode == 200 || statusCode == 201) {
+                        chatController.updateAdapterAfterSendReaction(message, emoji)
+                    }
+                }
+
+                override fun onError(e: Throwable) {
+                    Log.e(TAG, "error while sending emoji")
+                }
+
+                override fun onComplete() {
+                    dismiss()
+                }
+            })
+    }
+
     companion object {
+        private const val TAG = "MessageActionsDialog"
         private const val ACTOR_LENGTH = 6
         private const val NO_PREVIOUS_MESSAGE_ID: Int = -1
     }

+ 2 - 2
app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt

@@ -122,9 +122,9 @@ class ShowReactionsDialog(
 
         val credentials = ApiUtils.getCredentials(userEntity?.username, userEntity?.token)
 
-        ncApi.getParticipantsForEmojiReaction(
+        ncApi.getReactions(
             credentials,
-            ApiUtils.getUrlForParticipantsForEmojiReaction(
+            ApiUtils.getUrlForMessageReaction(
                 userEntity?.baseUrl,
                 currentConversation!!.token,
                 chatMessage.id

+ 3 - 3
app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java

@@ -442,9 +442,9 @@ public class ApiUtils {
         return baseUrl + ocsApiVersion + "/apps/user_status/api/v1/statuses";
     }
 
-    public static String getUrlForParticipantsForEmojiReaction(String baseUrl,
-                                                               String roomToken,
-                                                               String messageId) {
+    public static String getUrlForMessageReaction(String baseUrl,
+                                                  String roomToken,
+                                                  String messageId) {
         return baseUrl + ocsApiVersion + spreedApiVersion + "/reaction/" + roomToken + "/" + messageId;
     }
 

+ 6 - 6
app/src/main/res/layout/dialog_message_actions.xml

@@ -35,7 +35,7 @@
         android:gravity="center_vertical"
         android:orientation="horizontal">
 
-        <com.vanniktech.emoji.EmojiEditText
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@+id/emojiThumbsUp"
             android:layout_width="@dimen/activity_row_layout_height"
             android:layout_height="@dimen/activity_row_layout_height"
@@ -45,7 +45,7 @@
             android:text="@string/emoji_thumbsUp"
             android:textSize="24sp" />
 
-        <com.vanniktech.emoji.EmojiEditText
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@+id/emojiThumbsDown"
             android:layout_width="@dimen/activity_row_layout_height"
             android:layout_height="@dimen/activity_row_layout_height"
@@ -55,7 +55,7 @@
             android:text="@string/emoji_thumbsDown"
             android:textSize="24sp" />
 
-        <com.vanniktech.emoji.EmojiEditText
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@+id/emojiHeart"
             android:layout_width="@dimen/activity_row_layout_height"
             android:layout_height="@dimen/activity_row_layout_height"
@@ -65,7 +65,7 @@
             android:text="@string/default_emoji"
             android:textSize="24sp" />
 
-        <com.vanniktech.emoji.EmojiEditText
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@+id/emojiLaugh"
             android:layout_width="@dimen/activity_row_layout_height"
             android:layout_height="@dimen/activity_row_layout_height"
@@ -75,7 +75,7 @@
             android:text="@string/emoji_heart"
             android:textSize="24sp" />
 
-        <com.vanniktech.emoji.EmojiEditText
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@+id/emojiConfused"
             android:layout_width="@dimen/activity_row_layout_height"
             android:layout_height="@dimen/activity_row_layout_height"
@@ -85,7 +85,7 @@
             android:text="@string/emoji_confused"
             android:textSize="24sp" />
 
-        <com.vanniktech.emoji.EmojiEditText
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@+id/emojiSad"
             android:layout_width="@dimen/activity_row_layout_height"
             android:layout_height="@dimen/activity_row_layout_height"