mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 03:59:35 +01:00
add ability to send emoji
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
parent
a8b120a345
commit
f4ab037a44
@ -490,8 +490,17 @@ public interface NcApi {
|
|||||||
@GET
|
@GET
|
||||||
Observable<StatusesOverall> getUserStatuses(@Header("Authorization") String authorization, @Url String url);
|
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
|
@GET
|
||||||
Observable<ReactionsOverall> getParticipantsForEmojiReaction(@Header("Authorization") String authorization,
|
Observable<ReactionsOverall> getReactions(@Header("Authorization") String authorization,
|
||||||
@Url String url,
|
@Url String url,
|
||||||
@Query("reaction") String reaction);
|
@Query("reaction") String reaction);
|
||||||
}
|
}
|
||||||
|
@ -2438,7 +2438,8 @@ class ChatController(args: Bundle) :
|
|||||||
message,
|
message,
|
||||||
conversationUser,
|
conversationUser,
|
||||||
currentConversation,
|
currentConversation,
|
||||||
isShowMessageDeletionButton(message)
|
isShowMessageDeletionButton(message),
|
||||||
|
ncApi!!
|
||||||
).show()
|
).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2720,6 +2721,15 @@ class ChatController(args: Bundle) :
|
|||||||
adapter?.update(messageTemp)
|
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 {
|
private fun isShowMessageDeletionButton(message: ChatMessage): Boolean {
|
||||||
if (conversationUser == null) return false
|
if (conversationUser == null) return false
|
||||||
|
|
||||||
|
@ -21,25 +21,35 @@
|
|||||||
package com.nextcloud.talk.ui.dialog
|
package com.nextcloud.talk.ui.dialog
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.annotation.NonNull
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||||
import com.nextcloud.talk.BuildConfig
|
import com.nextcloud.talk.BuildConfig
|
||||||
import com.nextcloud.talk.R
|
import com.nextcloud.talk.R
|
||||||
|
import com.nextcloud.talk.api.NcApi
|
||||||
import com.nextcloud.talk.controllers.ChatController
|
import com.nextcloud.talk.controllers.ChatController
|
||||||
import com.nextcloud.talk.databinding.DialogMessageActionsBinding
|
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.CapabilitiesUtil
|
||||||
|
import com.nextcloud.talk.models.database.UserEntity
|
||||||
import com.nextcloud.talk.models.json.chat.ChatMessage
|
import com.nextcloud.talk.models.json.chat.ChatMessage
|
||||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
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(
|
class MessageActionsDialog(
|
||||||
private val chatController: ChatController,
|
private val chatController: ChatController,
|
||||||
private val message: ChatMessage,
|
private val message: ChatMessage,
|
||||||
private val user: UserEntity?,
|
private val user: UserEntity?,
|
||||||
private val currentConversation: Conversation?,
|
private val currentConversation: Conversation?,
|
||||||
private val showMessageDeletionButton: Boolean
|
private val showMessageDeletionButton: Boolean,
|
||||||
|
private val ncApi: NcApi
|
||||||
) : BottomSheetDialog(chatController.activity!!) {
|
) : BottomSheetDialog(chatController.activity!!) {
|
||||||
|
|
||||||
private lateinit var dialogMessageActionsBinding: DialogMessageActionsBinding
|
private lateinit var dialogMessageActionsBinding: DialogMessageActionsBinding
|
||||||
@ -73,22 +83,22 @@ class MessageActionsDialog(
|
|||||||
private fun initEmojiBar() {
|
private fun initEmojiBar() {
|
||||||
if (CapabilitiesUtil.hasSpreedFeatureCapability(user, "reactions")) {
|
if (CapabilitiesUtil.hasSpreedFeatureCapability(user, "reactions")) {
|
||||||
dialogMessageActionsBinding.emojiThumbsUp.setOnClickListener {
|
dialogMessageActionsBinding.emojiThumbsUp.setOnClickListener {
|
||||||
dismiss()
|
sendReaction(message, dialogMessageActionsBinding.emojiThumbsUp.text.toString())
|
||||||
}
|
}
|
||||||
dialogMessageActionsBinding.emojiThumbsDown.setOnClickListener {
|
dialogMessageActionsBinding.emojiThumbsDown.setOnClickListener {
|
||||||
dismiss()
|
sendReaction(message, dialogMessageActionsBinding.emojiThumbsDown.text.toString())
|
||||||
}
|
}
|
||||||
dialogMessageActionsBinding.emojiLaugh.setOnClickListener {
|
dialogMessageActionsBinding.emojiLaugh.setOnClickListener {
|
||||||
dismiss()
|
sendReaction(message, dialogMessageActionsBinding.emojiLaugh.text.toString())
|
||||||
}
|
}
|
||||||
dialogMessageActionsBinding.emojiHeart.setOnClickListener {
|
dialogMessageActionsBinding.emojiHeart.setOnClickListener {
|
||||||
dismiss()
|
sendReaction(message, dialogMessageActionsBinding.emojiHeart.text.toString())
|
||||||
}
|
}
|
||||||
dialogMessageActionsBinding.emojiConfused.setOnClickListener {
|
dialogMessageActionsBinding.emojiConfused.setOnClickListener {
|
||||||
dismiss()
|
sendReaction(message, dialogMessageActionsBinding.emojiConfused.text.toString())
|
||||||
}
|
}
|
||||||
dialogMessageActionsBinding.emojiSad.setOnClickListener {
|
dialogMessageActionsBinding.emojiSad.setOnClickListener {
|
||||||
dismiss()
|
sendReaction(message, dialogMessageActionsBinding.emojiSad.text.toString())
|
||||||
}
|
}
|
||||||
dialogMessageActionsBinding.emojiMore.setOnClickListener {
|
dialogMessageActionsBinding.emojiMore.setOnClickListener {
|
||||||
dismiss()
|
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 {
|
companion object {
|
||||||
|
private const val TAG = "MessageActionsDialog"
|
||||||
private const val ACTOR_LENGTH = 6
|
private const val ACTOR_LENGTH = 6
|
||||||
private const val NO_PREVIOUS_MESSAGE_ID: Int = -1
|
private const val NO_PREVIOUS_MESSAGE_ID: Int = -1
|
||||||
}
|
}
|
||||||
|
@ -122,9 +122,9 @@ class ShowReactionsDialog(
|
|||||||
|
|
||||||
val credentials = ApiUtils.getCredentials(userEntity?.username, userEntity?.token)
|
val credentials = ApiUtils.getCredentials(userEntity?.username, userEntity?.token)
|
||||||
|
|
||||||
ncApi.getParticipantsForEmojiReaction(
|
ncApi.getReactions(
|
||||||
credentials,
|
credentials,
|
||||||
ApiUtils.getUrlForParticipantsForEmojiReaction(
|
ApiUtils.getUrlForMessageReaction(
|
||||||
userEntity?.baseUrl,
|
userEntity?.baseUrl,
|
||||||
currentConversation!!.token,
|
currentConversation!!.token,
|
||||||
chatMessage.id
|
chatMessage.id
|
||||||
|
@ -442,9 +442,9 @@ public class ApiUtils {
|
|||||||
return baseUrl + ocsApiVersion + "/apps/user_status/api/v1/statuses";
|
return baseUrl + ocsApiVersion + "/apps/user_status/api/v1/statuses";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getUrlForParticipantsForEmojiReaction(String baseUrl,
|
public static String getUrlForMessageReaction(String baseUrl,
|
||||||
String roomToken,
|
String roomToken,
|
||||||
String messageId) {
|
String messageId) {
|
||||||
return baseUrl + ocsApiVersion + spreedApiVersion + "/reaction/" + roomToken + "/" + messageId;
|
return baseUrl + ocsApiVersion + spreedApiVersion + "/reaction/" + roomToken + "/" + messageId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<com.vanniktech.emoji.EmojiEditText
|
<com.vanniktech.emoji.EmojiTextView
|
||||||
android:id="@+id/emojiThumbsUp"
|
android:id="@+id/emojiThumbsUp"
|
||||||
android:layout_width="@dimen/activity_row_layout_height"
|
android:layout_width="@dimen/activity_row_layout_height"
|
||||||
android:layout_height="@dimen/activity_row_layout_height"
|
android:layout_height="@dimen/activity_row_layout_height"
|
||||||
@ -45,7 +45,7 @@
|
|||||||
android:text="@string/emoji_thumbsUp"
|
android:text="@string/emoji_thumbsUp"
|
||||||
android:textSize="24sp" />
|
android:textSize="24sp" />
|
||||||
|
|
||||||
<com.vanniktech.emoji.EmojiEditText
|
<com.vanniktech.emoji.EmojiTextView
|
||||||
android:id="@+id/emojiThumbsDown"
|
android:id="@+id/emojiThumbsDown"
|
||||||
android:layout_width="@dimen/activity_row_layout_height"
|
android:layout_width="@dimen/activity_row_layout_height"
|
||||||
android:layout_height="@dimen/activity_row_layout_height"
|
android:layout_height="@dimen/activity_row_layout_height"
|
||||||
@ -55,7 +55,7 @@
|
|||||||
android:text="@string/emoji_thumbsDown"
|
android:text="@string/emoji_thumbsDown"
|
||||||
android:textSize="24sp" />
|
android:textSize="24sp" />
|
||||||
|
|
||||||
<com.vanniktech.emoji.EmojiEditText
|
<com.vanniktech.emoji.EmojiTextView
|
||||||
android:id="@+id/emojiHeart"
|
android:id="@+id/emojiHeart"
|
||||||
android:layout_width="@dimen/activity_row_layout_height"
|
android:layout_width="@dimen/activity_row_layout_height"
|
||||||
android:layout_height="@dimen/activity_row_layout_height"
|
android:layout_height="@dimen/activity_row_layout_height"
|
||||||
@ -65,7 +65,7 @@
|
|||||||
android:text="@string/default_emoji"
|
android:text="@string/default_emoji"
|
||||||
android:textSize="24sp" />
|
android:textSize="24sp" />
|
||||||
|
|
||||||
<com.vanniktech.emoji.EmojiEditText
|
<com.vanniktech.emoji.EmojiTextView
|
||||||
android:id="@+id/emojiLaugh"
|
android:id="@+id/emojiLaugh"
|
||||||
android:layout_width="@dimen/activity_row_layout_height"
|
android:layout_width="@dimen/activity_row_layout_height"
|
||||||
android:layout_height="@dimen/activity_row_layout_height"
|
android:layout_height="@dimen/activity_row_layout_height"
|
||||||
@ -75,7 +75,7 @@
|
|||||||
android:text="@string/emoji_heart"
|
android:text="@string/emoji_heart"
|
||||||
android:textSize="24sp" />
|
android:textSize="24sp" />
|
||||||
|
|
||||||
<com.vanniktech.emoji.EmojiEditText
|
<com.vanniktech.emoji.EmojiTextView
|
||||||
android:id="@+id/emojiConfused"
|
android:id="@+id/emojiConfused"
|
||||||
android:layout_width="@dimen/activity_row_layout_height"
|
android:layout_width="@dimen/activity_row_layout_height"
|
||||||
android:layout_height="@dimen/activity_row_layout_height"
|
android:layout_height="@dimen/activity_row_layout_height"
|
||||||
@ -85,7 +85,7 @@
|
|||||||
android:text="@string/emoji_confused"
|
android:text="@string/emoji_confused"
|
||||||
android:textSize="24sp" />
|
android:textSize="24sp" />
|
||||||
|
|
||||||
<com.vanniktech.emoji.EmojiEditText
|
<com.vanniktech.emoji.EmojiTextView
|
||||||
android:id="@+id/emojiSad"
|
android:id="@+id/emojiSad"
|
||||||
android:layout_width="@dimen/activity_row_layout_height"
|
android:layout_width="@dimen/activity_row_layout_height"
|
||||||
android:layout_height="@dimen/activity_row_layout_height"
|
android:layout_height="@dimen/activity_row_layout_height"
|
||||||
|
Loading…
Reference in New Issue
Block a user