Merge pull request #1934 from nextcloud/feature/1915/showOwnReactions

Show own reactions
This commit is contained in:
Marcel Hibbe 2022-04-22 12:14:03 +02:00 committed by GitHub
commit dc26a20278
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 329 additions and 82 deletions

View File

@ -102,7 +102,7 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) : Mess
// geo-location // geo-location
setLocationDataOnMessageItem(message) setLocationDataOnMessageItem(message)
Reaction().showReactions(message, binding.reactions, context!!, true) Reaction().showReactions(message, binding.reactions, binding.messageText.context, false)
binding.reactions.reactionsEmojiWrapper.setOnClickListener { binding.reactions.reactionsEmojiWrapper.setOnClickListener {
reactionsInterface.onClickReactions(message) reactionsInterface.onClickReactions(message)
} }

View File

@ -142,7 +142,7 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : Message
} }
}) })
Reaction().showReactions(message, binding.reactions, context!!, true) Reaction().showReactions(message, binding.reactions, binding.messageTime.context, false)
binding.reactions.reactionsEmojiWrapper.setOnClickListener { binding.reactions.reactionsEmojiWrapper.setOnClickListener {
reactionsInterface.onClickReactions(message) reactionsInterface.onClickReactions(message)
} }

View File

@ -122,7 +122,7 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message
itemView.setTag(MessageSwipeCallback.REPLYABLE_VIEW_TAG, message.isReplyable) itemView.setTag(MessageSwipeCallback.REPLYABLE_VIEW_TAG, message.isReplyable)
Reaction().showReactions(message, binding.reactions, context!!, true) Reaction().showReactions(message, binding.reactions, binding.messageText.context, false)
binding.reactions.reactionsEmojiWrapper.setOnClickListener { binding.reactions.reactionsEmojiWrapper.setOnClickListener {
reactionsInterface.onClickReactions(message) reactionsInterface.onClickReactions(message)
} }

View File

@ -259,7 +259,7 @@ public abstract class MagicPreviewMessageViewHolder extends MessageHolders.Incom
itemView.setTag(REPLYABLE_VIEW_TAG, message.isReplyable()); itemView.setTag(REPLYABLE_VIEW_TAG, message.isReplyable());
reactionsBinding = getReactionsBinding(); reactionsBinding = getReactionsBinding();
new Reaction().showReactions(message, reactionsBinding, context, false); new Reaction().showReactions(message, reactionsBinding, getMessageText().getContext(), true);
reactionsBinding.reactionsEmojiWrapper.setOnClickListener(l -> { reactionsBinding.reactionsEmojiWrapper.setOnClickListener(l -> {
reactionsInterface.onClickReactions(message); reactionsInterface.onClickReactions(message);
}); });

View File

@ -114,7 +114,7 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders
// geo-location // geo-location
setLocationDataOnMessageItem(message) setLocationDataOnMessageItem(message)
Reaction().showReactions(message, binding.reactions, context!!, true) Reaction().showReactions(message, binding.reactions, binding.messageText.context, true)
binding.reactions.reactionsEmojiWrapper.setOnClickListener { binding.reactions.reactionsEmojiWrapper.setOnClickListener {
reactionsInterface.onClickReactions(message) reactionsInterface.onClickReactions(message)
} }

View File

@ -131,7 +131,7 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders
binding.checkMark.setContentDescription(readStatusContentDescriptionString) binding.checkMark.setContentDescription(readStatusContentDescriptionString)
Reaction().showReactions(message, binding.reactions, context!!, true) Reaction().showReactions(message, binding.reactions, binding.messageTime.context, true)
binding.reactions.reactionsEmojiWrapper.setOnClickListener { binding.reactions.reactionsEmojiWrapper.setOnClickListener {
reactionsInterface.onClickReactions(message) reactionsInterface.onClickReactions(message)
} }

View File

@ -25,8 +25,9 @@ package com.nextcloud.talk.adapters.messages
import android.content.Context import android.content.Context
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.RelativeLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding
@ -35,47 +36,75 @@ import com.nextcloud.talk.utils.DisplayUtils
import com.vanniktech.emoji.EmojiTextView import com.vanniktech.emoji.EmojiTextView
class Reaction { class Reaction {
fun showReactions( fun showReactions(
message: ChatMessage, message: ChatMessage,
binding: ReactionsInsideMessageBinding, binding: ReactionsInsideMessageBinding,
context: Context, context: Context,
useLightColorForText: Boolean isOutgoingMessage: Boolean
) { ) {
binding.reactionsEmojiWrapper.removeAllViews() binding.reactionsEmojiWrapper.removeAllViews()
if (message.reactions != null && message.reactions.isNotEmpty()) { if (message.reactions != null && message.reactions.isNotEmpty()) {
var remainingEmojisToDisplay = MAX_EMOJIS_TO_DISPLAY var remainingEmojisToDisplay = MAX_EMOJIS_TO_DISPLAY
val showInfoAboutMoreEmojis = message.reactions.size > MAX_EMOJIS_TO_DISPLAY val showInfoAboutMoreEmojis = message.reactions.size > MAX_EMOJIS_TO_DISPLAY
for ((emoji, amount) in message.reactions) {
val reactionEmoji = EmojiTextView(context)
reactionEmoji.text = emoji
binding.reactionsEmojiWrapper.addView(reactionEmoji)
val reactionAmount = TextView(context) var textColor = ContextCompat.getColor(context, R.color.white)
if (!isOutgoingMessage) {
if (amount > 1) { textColor = ContextCompat.getColor(binding.root.context, R.color.high_emphasis_text)
if (useLightColorForText) {
reactionAmount.setTextColor(ContextCompat.getColor(context, R.color.nc_grey))
}
reactionAmount.text = amount.toString()
} }
val params = RelativeLayout.LayoutParams( val amountParams = LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT ViewGroup.LayoutParams.WRAP_CONTENT
) )
params.setMargins( amountParams.marginStart = DisplayUtils.convertDpToPixel(AMOUNT_START_MARGIN, context).toInt()
DisplayUtils.convertDpToPixel(EMOJI_START_MARGIN, context).toInt(),
0, val wrapperParams = LinearLayout.LayoutParams(
DisplayUtils.convertDpToPixel(EMOJI_END_MARGIN, context).toInt(), ViewGroup.LayoutParams.WRAP_CONTENT,
0 ViewGroup.LayoutParams.WRAP_CONTENT
) )
reactionAmount.layoutParams = params wrapperParams.marginEnd = DisplayUtils.convertDpToPixel(EMOJI_END_MARGIN, context).toInt()
binding.reactionsEmojiWrapper.addView(reactionAmount)
for ((emoji, amount) in message.reactions) {
val emojiWithAmountWrapper = LinearLayout(context)
emojiWithAmountWrapper.orientation = LinearLayout.HORIZONTAL
val reactionEmoji = EmojiTextView(context)
reactionEmoji.text = emoji
emojiWithAmountWrapper.addView(reactionEmoji)
if (amount > 1) {
val reactionAmount = TextView(context)
reactionAmount.setTextColor(textColor)
reactionAmount.text = amount.toString()
reactionAmount.layoutParams = amountParams
emojiWithAmountWrapper.addView(reactionAmount)
}
emojiWithAmountWrapper.layoutParams = wrapperParams
val paddingSide = DisplayUtils.convertDpToPixel(EMOJI_AND_AMOUNT_PADDING_SIDE, context).toInt()
val paddingTop = DisplayUtils.convertDpToPixel(WRAPPER_PADDING_TOP, context).toInt()
val paddingBottom = DisplayUtils.convertDpToPixel(WRAPPER_PADDING_BOTTOM, context).toInt()
if (message.reactionsSelf != null &&
message.reactionsSelf.isNotEmpty() &&
message.reactionsSelf.contains(emoji)
) {
emojiWithAmountWrapper.background =
AppCompatResources.getDrawable(context, R.drawable.reaction_self_background)
emojiWithAmountWrapper.setPaddingRelative(paddingSide, paddingTop, paddingSide, paddingBottom)
} else {
emojiWithAmountWrapper.setPaddingRelative(0, paddingTop, paddingSide, paddingBottom)
}
binding.reactionsEmojiWrapper.addView(emojiWithAmountWrapper)
remainingEmojisToDisplay-- remainingEmojisToDisplay--
if (remainingEmojisToDisplay == 0 && showInfoAboutMoreEmojis) { if (remainingEmojisToDisplay == 0 && showInfoAboutMoreEmojis) {
val infoAboutMoreEmojis = TextView(context) val infoAboutMoreEmojis = TextView(context)
infoAboutMoreEmojis.setTextColor(textColor)
infoAboutMoreEmojis.text = EMOJI_MORE infoAboutMoreEmojis.text = EMOJI_MORE
binding.reactionsEmojiWrapper.addView(infoAboutMoreEmojis) binding.reactionsEmojiWrapper.addView(infoAboutMoreEmojis)
break break
@ -86,8 +115,11 @@ class Reaction {
companion object { companion object {
const val MAX_EMOJIS_TO_DISPLAY = 4 const val MAX_EMOJIS_TO_DISPLAY = 4
const val EMOJI_START_MARGIN: Float = 2F const val AMOUNT_START_MARGIN: Float = 2F
const val EMOJI_END_MARGIN: Float = 8F const val EMOJI_END_MARGIN: Float = 6F
const val EMOJI_AND_AMOUNT_PADDING_SIDE: Float = 4F
const val WRAPPER_PADDING_TOP: Float = 2F
const val WRAPPER_PADDING_BOTTOM: Float = 3F
const val EMOJI_MORE = "" const val EMOJI_MORE = ""
} }
} }

View File

@ -2050,10 +2050,10 @@ class ChatController(args: Bundle) :
} else { } else {
processMessages(response, false, 0) processMessages(response, false, 0)
} }
} catch (npe: NullPointerException) { } catch (e: NullPointerException) {
// view binding can be null // view binding can be null
// since this is called asynchrously and UI might have been destroyed in the meantime // since this is called asynchrously and UI might have been destroyed in the meantime
Log.i(TAG, "UI destroyed - view binding already gone") Log.i(TAG, "UI destroyed - view binding already gone", e)
} }
} }
@ -2746,11 +2746,16 @@ class ChatController(args: Bundle) :
message.reactions = LinkedHashMap() message.reactions = LinkedHashMap()
} }
if (message.reactionsSelf == null) {
message.reactionsSelf = ArrayList<String>()
}
var amount = message.reactions[emoji] var amount = message.reactions[emoji]
if (amount == null) { if (amount == null) {
amount = 0 amount = 0
} }
message.reactions[emoji] = amount + 1 message.reactions[emoji] = amount + 1
message.reactionsSelf.add(emoji)
adapter?.update(message) adapter?.update(message)
} }

View File

@ -38,6 +38,7 @@ import com.stfalcon.chatkit.commons.models.MessageContentType;
import org.parceler.Parcel; import org.parceler.Parcel;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@ -96,6 +97,8 @@ public class ChatMessage implements MessageContentType, MessageContentType.Image
public String messageType; public String messageType;
@JsonField(name = "reactions") @JsonField(name = "reactions")
public LinkedHashMap<String, Integer> reactions; public LinkedHashMap<String, Integer> reactions;
@JsonField(name = "reactionsSelf")
public ArrayList<String> reactionsSelf;
public boolean isDownloadingVoiceMessage; public boolean isDownloadingVoiceMessage;
public boolean resetVoiceMessage; public boolean resetVoiceMessage;

View File

@ -29,6 +29,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import androidx.annotation.NonNull import androidx.annotation.NonNull
import androidx.appcompat.content.res.AppCompatResources
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
@ -43,6 +44,7 @@ import com.nextcloud.talk.models.json.conversations.Conversation
import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.vanniktech.emoji.EmojiPopup import com.vanniktech.emoji.EmojiPopup
import com.vanniktech.emoji.EmojiTextView
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
@ -123,24 +125,31 @@ class MessageActionsDialog(
private fun initEmojiBar() { private fun initEmojiBar() {
if (CapabilitiesUtil.hasSpreedFeatureCapability(user, "reactions")) { if (CapabilitiesUtil.hasSpreedFeatureCapability(user, "reactions")) {
checkAndSetEmojiSelfReaction(dialogMessageActionsBinding.emojiThumbsUp)
dialogMessageActionsBinding.emojiThumbsUp.setOnClickListener { dialogMessageActionsBinding.emojiThumbsUp.setOnClickListener {
sendReaction(message, dialogMessageActionsBinding.emojiThumbsUp.text.toString()) sendReaction(message, dialogMessageActionsBinding.emojiThumbsUp.text.toString())
} }
checkAndSetEmojiSelfReaction(dialogMessageActionsBinding.emojiThumbsDown)
dialogMessageActionsBinding.emojiThumbsDown.setOnClickListener { dialogMessageActionsBinding.emojiThumbsDown.setOnClickListener {
sendReaction(message, dialogMessageActionsBinding.emojiThumbsDown.text.toString()) sendReaction(message, dialogMessageActionsBinding.emojiThumbsDown.text.toString())
} }
checkAndSetEmojiSelfReaction(dialogMessageActionsBinding.emojiLaugh)
dialogMessageActionsBinding.emojiLaugh.setOnClickListener { dialogMessageActionsBinding.emojiLaugh.setOnClickListener {
sendReaction(message, dialogMessageActionsBinding.emojiLaugh.text.toString()) sendReaction(message, dialogMessageActionsBinding.emojiLaugh.text.toString())
} }
checkAndSetEmojiSelfReaction(dialogMessageActionsBinding.emojiHeart)
dialogMessageActionsBinding.emojiHeart.setOnClickListener { dialogMessageActionsBinding.emojiHeart.setOnClickListener {
sendReaction(message, dialogMessageActionsBinding.emojiHeart.text.toString()) sendReaction(message, dialogMessageActionsBinding.emojiHeart.text.toString())
} }
checkAndSetEmojiSelfReaction(dialogMessageActionsBinding.emojiConfused)
dialogMessageActionsBinding.emojiConfused.setOnClickListener { dialogMessageActionsBinding.emojiConfused.setOnClickListener {
sendReaction(message, dialogMessageActionsBinding.emojiConfused.text.toString()) sendReaction(message, dialogMessageActionsBinding.emojiConfused.text.toString())
} }
checkAndSetEmojiSelfReaction(dialogMessageActionsBinding.emojiSad)
dialogMessageActionsBinding.emojiSad.setOnClickListener { dialogMessageActionsBinding.emojiSad.setOnClickListener {
sendReaction(message, dialogMessageActionsBinding.emojiSad.text.toString()) sendReaction(message, dialogMessageActionsBinding.emojiSad.text.toString())
} }
dialogMessageActionsBinding.emojiMore.setOnClickListener { dialogMessageActionsBinding.emojiMore.setOnClickListener {
dismiss() dismiss()
} }
@ -150,6 +159,12 @@ class MessageActionsDialog(
} }
} }
private fun checkAndSetEmojiSelfReaction(emoji: EmojiTextView) {
if (emoji.text?.toString() != null && message.reactionsSelf?.contains(emoji.text?.toString()) == true) {
emoji.background = AppCompatResources.getDrawable(context, R.drawable.reaction_self_bottom_sheet_background)
}
}
private fun initMenuMarkAsUnread(visible: Boolean) { private fun initMenuMarkAsUnread(visible: Boolean) {
if (visible) { if (visible) {
dialogMessageActionsBinding.menuMarkAsUnread.setOnClickListener { dialogMessageActionsBinding.menuMarkAsUnread.setOnClickListener {
@ -232,6 +247,14 @@ class MessageActionsDialog(
} }
private fun sendReaction(message: ChatMessage, emoji: String) { private fun sendReaction(message: ChatMessage, emoji: String) {
if (message.reactionsSelf.contains(emoji)) {
deleteReaction(message, emoji)
} else {
addReaction(message, emoji)
}
}
private fun addReaction(message: ChatMessage, emoji: String) {
val credentials = ApiUtils.getCredentials(user?.username, user?.token) val credentials = ApiUtils.getCredentials(user?.username, user?.token)
ncApi.sendReaction( ncApi.sendReaction(
@ -258,7 +281,40 @@ class MessageActionsDialog(
} }
override fun onError(e: Throwable) { override fun onError(e: Throwable) {
Log.e(TAG, "error while sending reaction") Log.e(TAG, "error while sending reaction: $emoji")
}
override fun onComplete() {
dismiss()
}
})
}
private fun deleteReaction(message: ChatMessage, emoji: String) {
val credentials = ApiUtils.getCredentials(user?.username, user?.token)
ncApi.deleteReaction(
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) {
// unused atm
}
override fun onNext(@NonNull genericOverall: GenericOverall) {
Log.d(TAG, "deleted reaction: $emoji")
}
override fun onError(e: Throwable) {
Log.e(TAG, "error while deleting reaction: $emoji")
} }
override fun onComplete() { override fun onComplete() {
@ -271,7 +327,6 @@ class MessageActionsDialog(
private const val TAG = "MessageActionsDialog" 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
private const val HTTP_OK: Int = 200
private const val HTTP_CREATED: Int = 201 private const val HTTP_CREATED: Int = 201
} }
} }

View File

@ -185,10 +185,9 @@ class ShowReactionsDialog(
override fun onClick(reactionItem: ReactionItem) { override fun onClick(reactionItem: ReactionItem) {
if (reactionItem.reactionVoter.actorId?.equals(userEntity?.userId) == true) { if (reactionItem.reactionVoter.actorId?.equals(userEntity?.userId) == true) {
deleteReaction(chatMessage, reactionItem.reaction!!) deleteReaction(chatMessage, reactionItem.reaction!!)
}
dismiss() dismiss()
} }
}
private fun deleteReaction(message: ChatMessage, emoji: String) { private fun deleteReaction(message: ChatMessage, emoji: String) {
val credentials = ApiUtils.getCredentials(userEntity?.username, userEntity?.token) val credentials = ApiUtils.getCredentials(userEntity?.username, userEntity?.token)

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?><!--
Nextcloud Android client application
@author Marcel Hibbe
Copyright (C) 2022 Marcel Hibbe
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<stroke
android:width="1dp"
android:color="@color/colorPrimary" />
<solid
android:color="@color/bg_message_own_reaction" />
<padding
android:left="1dp"
android:right="1dp"
android:bottom="1dp"
android:top="1dp" />
<corners android:radius="15dp" />
</shape>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Nextcloud Talk application
~
~ @author Andy Scherzinger
~ Copyright (C) 2022 Andy Scherzinger <info@andy-scherzinger.de>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<stroke
android:width="1dp"
android:color="@color/colorPrimary" />
<solid android:color="@color/bg_message_own_reaction" />
</shape>

View File

@ -3,7 +3,7 @@
~ ~
~ @author Marcel Hibbe ~ @author Marcel Hibbe
~ @author Andy Scherzinger ~ @author Andy Scherzinger
~ Copyright (C) 2021 Andy Scherzinger <info@andy-scherzinger.de> ~ Copyright (C) 2021-2022 Andy Scherzinger <info@andy-scherzinger.de>
~ Copyright (C) 2021 Marcel Hibbe <marcel.hibbe@nextcloud.com> ~ Copyright (C) 2021 Marcel Hibbe <marcel.hibbe@nextcloud.com>
~ ~
~ This program is free software: you can redistribute it and/or modify ~ This program is free software: you can redistribute it and/or modify
@ -19,15 +19,12 @@
~ You should have received a copy of the GNU General Public License ~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>. ~ along with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"> android:paddingBottom="@dimen/standard_half_padding">
<TextView <TextView
@ -35,6 +32,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:gravity="start|center_vertical" android:gravity="start|center_vertical"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
android:text="@string/nc_add_file" android:text="@string/nc_add_file"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="@color/medium_emphasis_text" android:textColor="@color/medium_emphasis_text"
@ -47,6 +46,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -78,6 +79,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -109,6 +112,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -140,6 +145,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -171,6 +178,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView

View File

@ -25,8 +25,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/bg_call_screen_dialog" android:background="@color/bg_call_screen_dialog"
android:orientation="vertical" android:orientation="vertical"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"> android:paddingBottom="@dimen/standard_half_padding">
<TextView <TextView
@ -34,6 +32,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:gravity="start|center_vertical" android:gravity="start|center_vertical"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
android:text="@string/audio_output_dialog_headline" android:text="@string/audio_output_dialog_headline"
android:textColor="@color/medium_emphasis_text_dark_background" android:textColor="@color/medium_emphasis_text_dark_background"
android:textSize="@dimen/bottom_sheet_text_size" /> android:textSize="@dimen/bottom_sheet_text_size" />
@ -45,6 +45,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -76,6 +78,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -107,6 +111,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -138,6 +144,8 @@
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView

View File

@ -89,7 +89,8 @@
app:layout_constraintBottom_toTopOf="@+id/add_account" app:layout_constraintBottom_toTopOf="@+id/add_account"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/separator_line" /> app:layout_constraintTop_toBottomOf="@+id/separator_line"
tools:listitem="@layout/account_item" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/add_account" android:id="@+id/add_account"

View File

@ -26,8 +26,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"> android:paddingBottom="@dimen/standard_half_padding">
<LinearLayout <LinearLayout
@ -42,6 +40,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:gravity="start|center_vertical" android:gravity="start|center_vertical"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
android:textColor="@color/medium_emphasis_text" android:textColor="@color/medium_emphasis_text"
android:textSize="@dimen/bottom_sheet_text_size" android:textSize="@dimen/bottom_sheet_text_size"
tools:text="conversation name" /> tools:text="conversation name" />
@ -50,8 +50,11 @@
android:id="@+id/conversation_operation_remove_favorite" android:id="@+id/conversation_operation_remove_favorite"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -77,8 +80,11 @@
android:id="@+id/conversation_operation_add_favorite" android:id="@+id/conversation_operation_add_favorite"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -104,8 +110,11 @@
android:id="@+id/conversation_operation_mark_as_read" android:id="@+id/conversation_operation_mark_as_read"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -131,8 +140,11 @@
android:id="@+id/conversation_operation_rename" android:id="@+id/conversation_operation_rename"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -158,8 +170,11 @@
android:id="@+id/conversation_operation_make_public" android:id="@+id/conversation_operation_make_public"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -185,8 +200,11 @@
android:id="@+id/conversation_operation_change_password" android:id="@+id/conversation_operation_change_password"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -212,8 +230,11 @@
android:id="@+id/conversation_operation_clear_password" android:id="@+id/conversation_operation_clear_password"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -239,8 +260,11 @@
android:id="@+id/conversation_operation_set_password" android:id="@+id/conversation_operation_set_password"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -266,8 +290,11 @@
android:id="@+id/conversation_operation_delete" android:id="@+id/conversation_operation_delete"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -293,8 +320,11 @@
android:id="@+id/conversation_operation_share_link" android:id="@+id/conversation_operation_share_link"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -320,8 +350,11 @@
android:id="@+id/conversation_operation_make_private" android:id="@+id/conversation_operation_make_private"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -347,8 +380,11 @@
android:id="@+id/conversation_operation_leave" android:id="@+id/conversation_operation_leave"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="@dimen/bottom_sheet_item_height"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView

View File

@ -29,76 +29,85 @@
<LinearLayout <LinearLayout
android:id="@+id/emojiBar" android:id="@+id/emojiBar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_item_height" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_eighth_margin" android:layout_marginStart="@dimen/standard_quarter_margin"
android:layout_marginTop="@dimen/standard_half_margin"
android:layout_marginEnd="@dimen/zero" android:layout_marginEnd="@dimen/zero"
android:layout_marginBottom="@dimen/standard_half_margin"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
<com.vanniktech.emoji.EmojiTextView <com.vanniktech.emoji.EmojiTextView
android:id="@+id/emojiThumbsUp" android:id="@+id/emojiThumbsUp"
android:layout_width="@dimen/activity_row_layout_height" android:layout_width="@dimen/reaction_bottom_sheet_layout_size"
android:layout_height="@dimen/activity_row_layout_height" android:layout_height="@dimen/reaction_bottom_sheet_layout_size"
android:layout_weight="1" android:layout_marginLeft="@dimen/standard_quarter_margin"
android:layout_marginRight="@dimen/standard_quarter_margin"
android:cursorVisible="false" android:cursorVisible="false"
android:gravity="center" android:gravity="center"
android:text="@string/emoji_thumbsUp" android:text="@string/emoji_thumbsUp"
android:textSize="24sp" /> android:textSize="20sp" />
<com.vanniktech.emoji.EmojiTextView <com.vanniktech.emoji.EmojiTextView
android:id="@+id/emojiThumbsDown" android:id="@+id/emojiThumbsDown"
android:layout_width="@dimen/activity_row_layout_height" android:layout_width="@dimen/reaction_bottom_sheet_layout_size"
android:layout_height="@dimen/activity_row_layout_height" android:layout_height="@dimen/reaction_bottom_sheet_layout_size"
android:layout_weight="1" android:layout_marginLeft="@dimen/standard_quarter_margin"
android:layout_marginRight="@dimen/standard_quarter_margin"
android:cursorVisible="false" android:cursorVisible="false"
android:gravity="center" android:gravity="center"
android:text="@string/emoji_thumbsDown" android:text="@string/emoji_thumbsDown"
android:textSize="24sp" /> android:textSize="20sp" />
<com.vanniktech.emoji.EmojiTextView <com.vanniktech.emoji.EmojiTextView
android:id="@+id/emojiHeart" android:id="@+id/emojiHeart"
android:layout_width="@dimen/activity_row_layout_height" android:layout_width="@dimen/reaction_bottom_sheet_layout_size"
android:layout_height="@dimen/activity_row_layout_height" android:layout_height="@dimen/reaction_bottom_sheet_layout_size"
android:layout_weight="1" android:layout_marginLeft="@dimen/standard_quarter_margin"
android:layout_marginRight="@dimen/standard_quarter_margin"
android:cursorVisible="false" android:cursorVisible="false"
android:gravity="center" android:gravity="center"
android:text="@string/default_emoji" android:text="@string/default_emoji"
android:textSize="24sp" /> android:textSize="20sp" />
<com.vanniktech.emoji.EmojiTextView <com.vanniktech.emoji.EmojiTextView
android:id="@+id/emojiLaugh" android:id="@+id/emojiLaugh"
android:layout_width="@dimen/activity_row_layout_height" android:layout_width="@dimen/reaction_bottom_sheet_layout_size"
android:layout_height="@dimen/activity_row_layout_height" android:layout_height="@dimen/reaction_bottom_sheet_layout_size"
android:layout_weight="1" android:layout_marginLeft="@dimen/standard_quarter_margin"
android:layout_marginRight="@dimen/standard_quarter_margin"
android:cursorVisible="false" android:cursorVisible="false"
android:gravity="center" android:gravity="center"
android:text="@string/emoji_heart" android:text="@string/emoji_heart"
android:textSize="24sp" /> android:textSize="20sp" />
<com.vanniktech.emoji.EmojiTextView <com.vanniktech.emoji.EmojiTextView
android:id="@+id/emojiConfused" android:id="@+id/emojiConfused"
android:layout_width="@dimen/activity_row_layout_height" android:layout_width="@dimen/reaction_bottom_sheet_layout_size"
android:layout_height="@dimen/activity_row_layout_height" android:layout_height="@dimen/reaction_bottom_sheet_layout_size"
android:layout_weight="1" android:layout_marginLeft="@dimen/standard_quarter_margin"
android:layout_marginRight="@dimen/standard_quarter_margin"
android:cursorVisible="false" android:cursorVisible="false"
android:gravity="center" android:gravity="center"
android:text="@string/emoji_confused" android:text="@string/emoji_confused"
android:textSize="24sp" /> android:textSize="20sp" />
<com.vanniktech.emoji.EmojiTextView <com.vanniktech.emoji.EmojiTextView
android:id="@+id/emojiSad" android:id="@+id/emojiSad"
android:layout_width="@dimen/activity_row_layout_height" android:layout_width="@dimen/reaction_bottom_sheet_layout_size"
android:layout_height="@dimen/activity_row_layout_height" android:layout_height="@dimen/reaction_bottom_sheet_layout_size"
android:layout_weight="1" android:layout_marginLeft="@dimen/standard_quarter_margin"
android:layout_marginRight="@dimen/standard_quarter_margin"
android:cursorVisible="false" android:cursorVisible="false"
android:gravity="center" android:gravity="center"
android:text="@string/emoji_sad" android:text="@string/emoji_sad"
android:textSize="24sp" /> android:textSize="20sp" />
<com.vanniktech.emoji.EmojiEditText <com.vanniktech.emoji.EmojiEditText
android:id="@+id/emojiMore" android:id="@+id/emojiMore"
android:layout_width="@dimen/activity_row_layout_height" android:layout_width="0dp"
android:layout_height="@dimen/activity_row_layout_height" android:layout_height="@dimen/activity_row_layout_height"
android:layout_marginEnd="2dp"
android:layout_weight="1" android:layout_weight="1"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/emoji_more" android:contentDescription="@string/emoji_more"
@ -111,8 +120,6 @@
android:id="@+id/message_actions" android:id="@+id/message_actions"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/standard_padding"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <LinearLayout
@ -129,6 +136,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@null" android:contentDescription="@null"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/zero"
android:src="@drawable/ic_reply" android:src="@drawable/ic_reply"
app:tint="@color/high_emphasis_menu_icon" /> app:tint="@color/high_emphasis_menu_icon" />
@ -138,7 +147,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:paddingStart="@dimen/standard_double_padding" android:paddingStart="@dimen/standard_double_padding"
android:paddingEnd="@dimen/zero" android:paddingEnd="@dimen/standard_padding"
android:text="@string/nc_reply" android:text="@string/nc_reply"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="@color/high_emphasis_text" android:textColor="@color/high_emphasis_text"
@ -160,6 +169,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@null" android:contentDescription="@null"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/zero"
android:src="@drawable/ic_reply" android:src="@drawable/ic_reply"
app:tint="@color/high_emphasis_menu_icon" /> app:tint="@color/high_emphasis_menu_icon" />
@ -169,7 +180,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:paddingStart="@dimen/standard_double_padding" android:paddingStart="@dimen/standard_double_padding"
android:paddingEnd="@dimen/zero" android:paddingEnd="@dimen/standard_padding"
android:text="@string/nc_reply_privately" android:text="@string/nc_reply_privately"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="@color/high_emphasis_text" android:textColor="@color/high_emphasis_text"
@ -191,6 +202,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@null" android:contentDescription="@null"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/zero"
android:src="@drawable/ic_share_action" android:src="@drawable/ic_share_action"
app:tint="@color/high_emphasis_menu_icon" /> app:tint="@color/high_emphasis_menu_icon" />
@ -200,7 +213,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:paddingStart="@dimen/standard_double_padding" android:paddingStart="@dimen/standard_double_padding"
android:paddingEnd="@dimen/zero" android:paddingEnd="@dimen/standard_padding"
android:text="@string/nc_forward_message" android:text="@string/nc_forward_message"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="@color/high_emphasis_text" android:textColor="@color/high_emphasis_text"
@ -222,6 +235,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@null" android:contentDescription="@null"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/zero"
android:src="@drawable/ic_eye_off" android:src="@drawable/ic_eye_off"
app:tint="@color/high_emphasis_menu_icon" /> app:tint="@color/high_emphasis_menu_icon" />
@ -231,7 +246,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:paddingStart="@dimen/standard_double_padding" android:paddingStart="@dimen/standard_double_padding"
android:paddingEnd="@dimen/zero" android:paddingEnd="@dimen/standard_padding"
android:text="@string/nc_mark_as_unread" android:text="@string/nc_mark_as_unread"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="@color/high_emphasis_text" android:textColor="@color/high_emphasis_text"
@ -253,6 +268,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@null" android:contentDescription="@null"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/zero"
android:src="@drawable/ic_content_copy" android:src="@drawable/ic_content_copy"
app:tint="@color/high_emphasis_menu_icon" /> app:tint="@color/high_emphasis_menu_icon" />
@ -262,7 +279,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:paddingStart="@dimen/standard_double_padding" android:paddingStart="@dimen/standard_double_padding"
android:paddingEnd="@dimen/zero" android:paddingEnd="@dimen/standard_padding"
android:text="@string/nc_copy_message" android:text="@string/nc_copy_message"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="@color/high_emphasis_text" android:textColor="@color/high_emphasis_text"
@ -284,6 +301,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@null" android:contentDescription="@null"
android:paddingStart="@dimen/standard_padding"
android:paddingEnd="@dimen/zero"
android:src="@drawable/ic_delete" android:src="@drawable/ic_delete"
app:tint="@color/high_emphasis_menu_icon" /> app:tint="@color/high_emphasis_menu_icon" />
@ -293,7 +312,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:paddingStart="@dimen/standard_double_padding" android:paddingStart="@dimen/standard_double_padding"
android:paddingEnd="@dimen/zero" android:paddingEnd="@dimen/standard_padding"
android:text="@string/nc_delete_message" android:text="@string/nc_delete_message"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="@color/high_emphasis_text" android:textColor="@color/high_emphasis_text"

View File

@ -4,7 +4,7 @@
~ @author Tobias Kaminsky ~ @author Tobias Kaminsky
~ @author Andy Scherzinger ~ @author Andy Scherzinger
~ Copyright (C) 2021 Tobias Kaminsky <tobias.kaminsky@nextcloud.com> ~ Copyright (C) 2021 Tobias Kaminsky <tobias.kaminsky@nextcloud.com>
~ Copyright (C) 2021 Andy Scherzinger <info@andy-scherzinger.de> ~ Copyright (C) 2021-2022 Andy Scherzinger <info@andy-scherzinger.de>
~ ~
~ This program is free software: you can redistribute it and/or modify ~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by ~ it under the terms of the GNU General Public License as published by
@ -19,23 +19,23 @@
~ You should have received a copy of the GNU General Public License ~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>. ~ along with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:paddingStart="@dimen/standard_padding"
android:paddingTop="@dimen/standard_half_padding" android:paddingTop="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"> android:paddingBottom="@dimen/standard_half_padding">
<LinearLayout <LinearLayout
android:id="@+id/scope_private" android:id="@+id/scope_private"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingTop="@dimen/standard_half_padding" android:paddingTop="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"> android:paddingBottom="@dimen/standard_half_padding">
<ImageView <ImageView
@ -77,8 +77,11 @@
android:id="@+id/scope_local" android:id="@+id/scope_local"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingTop="@dimen/standard_half_padding" android:paddingTop="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"> android:paddingBottom="@dimen/standard_half_padding">
<ImageView <ImageView
@ -120,8 +123,11 @@
android:id="@+id/scope_federated" android:id="@+id/scope_federated"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingTop="@dimen/standard_half_padding" android:paddingTop="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"> android:paddingBottom="@dimen/standard_half_padding">
<ImageView <ImageView
@ -163,8 +169,11 @@
android:id="@+id/scope_published" android:id="@+id/scope_published"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/standard_padding"
android:paddingTop="@dimen/standard_half_padding" android:paddingTop="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"> android:paddingBottom="@dimen/standard_half_padding">
<ImageView <ImageView

View File

@ -22,7 +22,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/item_height"> android:layout_height="@dimen/item_height"
android:background="?android:attr/selectableItemBackground">
<com.facebook.drawee.view.SimpleDraweeView <com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/avatar" android:id="@+id/avatar"

View File

@ -65,6 +65,8 @@
<color name="textColorMaxContrast">#8c8c8c</color> <color name="textColorMaxContrast">#8c8c8c</color>
<color name="bg_message_own_reaction">#29ffffff</color>
<!-- shimmer element colors --> <!-- shimmer element colors -->
<color name="nc_shimmer_default_color">#4B4B4B</color> <color name="nc_shimmer_default_color">#4B4B4B</color>
<color name="nc_shimmer_darker_color">#282828</color> <color name="nc_shimmer_darker_color">#282828</color>

View File

@ -99,6 +99,8 @@
<!-- voicemessage --> <!-- voicemessage -->
<color name="nc_voice_message_outgoing_controls">#606060</color> <color name="nc_voice_message_outgoing_controls">#606060</color>
<color name="bg_message_own_reaction">#99ffffff</color>
<color name="camera_bg_tint">#99121212</color> <color name="camera_bg_tint">#99121212</color>
<color name="list_divider_background">#eeeeee</color> <color name="list_divider_background">#eeeeee</color>

View File

@ -68,5 +68,6 @@
<dimen name="standard_quarter_margin">4dp</dimen> <dimen name="standard_quarter_margin">4dp</dimen>
<dimen name="activity_list_item_title_header_text_size">16sp</dimen> <dimen name="activity_list_item_title_header_text_size">16sp</dimen>
<dimen name="activity_row_layout_height">48dp</dimen> <dimen name="activity_row_layout_height">48dp</dimen>
<dimen name="reaction_bottom_sheet_layout_size">40dp</dimen>
<dimen name="standard_eighth_margin">2dp</dimen> <dimen name="standard_eighth_margin">2dp</dimen>
</resources> </resources>