mirror of
https://github.com/nextcloud/talk-android
synced 2025-02-02 20:53:09 +00:00
extract UI build logic blocks
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
parent
649d8831ac
commit
5afb4b68cf
@ -49,68 +49,143 @@ class Reaction {
|
|||||||
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
|
||||||
|
|
||||||
var textColor = ContextCompat.getColor(context, R.color.white)
|
val textColor = getTextColor(context, isOutgoingMessage, binding)
|
||||||
if (!isOutgoingMessage) {
|
val amountParams = getAmountLayoutParams(context)
|
||||||
textColor = ContextCompat.getColor(binding.root.context, R.color.high_emphasis_text)
|
val wrapperParams = getWrapperLayoutParams(context)
|
||||||
}
|
|
||||||
|
|
||||||
val amountParams = LinearLayout.LayoutParams(
|
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
|
||||||
)
|
|
||||||
amountParams.marginStart = DisplayUtils.convertDpToPixel(AMOUNT_START_MARGIN, context).toInt()
|
|
||||||
|
|
||||||
val wrapperParams = LinearLayout.LayoutParams(
|
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
|
||||||
)
|
|
||||||
wrapperParams.marginEnd = DisplayUtils.convertDpToPixel(EMOJI_END_MARGIN, context).toInt()
|
|
||||||
|
|
||||||
for ((emoji, amount) in message.reactions) {
|
|
||||||
val emojiWithAmountWrapper = LinearLayout(context)
|
|
||||||
emojiWithAmountWrapper.orientation = LinearLayout.HORIZONTAL
|
|
||||||
|
|
||||||
val reactionEmoji = EmojiTextView(context)
|
|
||||||
reactionEmoji.text = emoji
|
|
||||||
|
|
||||||
emojiWithAmountWrapper.addView(reactionEmoji)
|
|
||||||
|
|
||||||
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 paddingSide = DisplayUtils.convertDpToPixel(EMOJI_AND_AMOUNT_PADDING_SIDE, context).toInt()
|
||||||
val paddingTop = DisplayUtils.convertDpToPixel(WRAPPER_PADDING_TOP, context).toInt()
|
val paddingTop = DisplayUtils.convertDpToPixel(WRAPPER_PADDING_TOP, context).toInt()
|
||||||
val paddingBottom = DisplayUtils.convertDpToPixel(WRAPPER_PADDING_BOTTOM, context).toInt()
|
val paddingBottom = DisplayUtils.convertDpToPixel(WRAPPER_PADDING_BOTTOM, context).toInt()
|
||||||
|
|
||||||
|
for ((emoji, amount) in message.reactions) {
|
||||||
|
val emojiWithAmountWrapper = getEmojiWithAmountWrapperLayout(
|
||||||
|
context,
|
||||||
|
message,
|
||||||
|
emoji,
|
||||||
|
amount,
|
||||||
|
EmojiWithAmountWrapperLayoutInfo(
|
||||||
|
textColor,
|
||||||
|
amountParams,
|
||||||
|
wrapperParams,
|
||||||
|
paddingSide,
|
||||||
|
paddingTop,
|
||||||
|
paddingBottom
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
binding.reactionsEmojiWrapper.addView(emojiWithAmountWrapper)
|
||||||
|
|
||||||
|
remainingEmojisToDisplay--
|
||||||
|
if (remainingEmojisToDisplay == 0 && showInfoAboutMoreEmojis) {
|
||||||
|
binding.reactionsEmojiWrapper.addView(getMoreReactionsTextView(context, textColor))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getEmojiWithAmountWrapperLayout(
|
||||||
|
context: Context,
|
||||||
|
message: ChatMessage,
|
||||||
|
emoji: String,
|
||||||
|
amount: Int,
|
||||||
|
layoutInfo: EmojiWithAmountWrapperLayoutInfo
|
||||||
|
): LinearLayout {
|
||||||
|
val emojiWithAmountWrapper = LinearLayout(context)
|
||||||
|
emojiWithAmountWrapper.orientation = LinearLayout.HORIZONTAL
|
||||||
|
|
||||||
|
emojiWithAmountWrapper.addView(getEmojiTextView(context, emoji))
|
||||||
|
emojiWithAmountWrapper.addView(getReactionCount(context, layoutInfo.textColor, amount, layoutInfo.amountParams))
|
||||||
|
emojiWithAmountWrapper.layoutParams = layoutInfo.wrapperParams
|
||||||
|
|
||||||
if (message.reactionsSelf != null &&
|
if (message.reactionsSelf != null &&
|
||||||
message.reactionsSelf.isNotEmpty() &&
|
message.reactionsSelf.isNotEmpty() &&
|
||||||
message.reactionsSelf.contains(emoji)
|
message.reactionsSelf.contains(emoji)
|
||||||
) {
|
) {
|
||||||
emojiWithAmountWrapper.background =
|
emojiWithAmountWrapper.background =
|
||||||
AppCompatResources.getDrawable(context, R.drawable.reaction_self_background)
|
AppCompatResources.getDrawable(context, R.drawable.reaction_self_background)
|
||||||
emojiWithAmountWrapper.setPaddingRelative(paddingSide, paddingTop, paddingSide, paddingBottom)
|
emojiWithAmountWrapper.setPaddingRelative(
|
||||||
|
layoutInfo.paddingSide,
|
||||||
|
layoutInfo.paddingTop,
|
||||||
|
layoutInfo.paddingSide,
|
||||||
|
layoutInfo.paddingBottom
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
emojiWithAmountWrapper.setPaddingRelative(0, paddingTop, paddingSide, paddingBottom)
|
emojiWithAmountWrapper.setPaddingRelative(
|
||||||
|
0,
|
||||||
|
layoutInfo.paddingTop,
|
||||||
|
layoutInfo.paddingSide,
|
||||||
|
layoutInfo.paddingBottom
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return emojiWithAmountWrapper
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.reactionsEmojiWrapper.addView(emojiWithAmountWrapper)
|
private fun getMoreReactionsTextView(context: Context, textColor: Int): TextView {
|
||||||
|
|
||||||
remainingEmojisToDisplay--
|
|
||||||
if (remainingEmojisToDisplay == 0 && showInfoAboutMoreEmojis) {
|
|
||||||
val infoAboutMoreEmojis = TextView(context)
|
val infoAboutMoreEmojis = TextView(context)
|
||||||
infoAboutMoreEmojis.setTextColor(textColor)
|
infoAboutMoreEmojis.setTextColor(textColor)
|
||||||
infoAboutMoreEmojis.text = EMOJI_MORE
|
infoAboutMoreEmojis.text = EMOJI_MORE
|
||||||
binding.reactionsEmojiWrapper.addView(infoAboutMoreEmojis)
|
return infoAboutMoreEmojis
|
||||||
break
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getEmojiTextView(context: Context, emoji: String): EmojiTextView {
|
||||||
|
val reactionEmoji = EmojiTextView(context)
|
||||||
|
reactionEmoji.text = emoji
|
||||||
|
return reactionEmoji
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getReactionCount(
|
||||||
|
context: Context,
|
||||||
|
textColor: Int,
|
||||||
|
amount: Int,
|
||||||
|
amountParams: LinearLayout.LayoutParams
|
||||||
|
): TextView {
|
||||||
|
val reactionAmount = TextView(context)
|
||||||
|
reactionAmount.setTextColor(textColor)
|
||||||
|
reactionAmount.text = amount.toString()
|
||||||
|
reactionAmount.layoutParams = amountParams
|
||||||
|
return reactionAmount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getWrapperLayoutParams(context: Context): LinearLayout.LayoutParams {
|
||||||
|
val wrapperParams = LinearLayout.LayoutParams(
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||||
|
)
|
||||||
|
wrapperParams.marginEnd = DisplayUtils.convertDpToPixel(EMOJI_END_MARGIN, context).toInt()
|
||||||
|
return wrapperParams
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getAmountLayoutParams(context: Context): LinearLayout.LayoutParams {
|
||||||
|
val amountParams = LinearLayout.LayoutParams(
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||||
|
)
|
||||||
|
amountParams.marginStart = DisplayUtils.convertDpToPixel(AMOUNT_START_MARGIN, context).toInt()
|
||||||
|
return amountParams
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getTextColor(
|
||||||
|
context: Context,
|
||||||
|
isOutgoingMessage: Boolean,
|
||||||
|
binding: ReactionsInsideMessageBinding
|
||||||
|
): Int {
|
||||||
|
var textColor = ContextCompat.getColor(context, R.color.white)
|
||||||
|
if (!isOutgoingMessage) {
|
||||||
|
textColor = ContextCompat.getColor(binding.root.context, R.color.high_emphasis_text)
|
||||||
|
}
|
||||||
|
return textColor
|
||||||
|
}
|
||||||
|
|
||||||
|
private data class EmojiWithAmountWrapperLayoutInfo(
|
||||||
|
val textColor: Int,
|
||||||
|
val amountParams: LinearLayout.LayoutParams,
|
||||||
|
val wrapperParams: LinearLayout.LayoutParams,
|
||||||
|
val paddingSide: Int,
|
||||||
|
val paddingTop: Int,
|
||||||
|
val paddingBottom: Int
|
||||||
|
)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val MAX_EMOJIS_TO_DISPLAY = 4
|
const val MAX_EMOJIS_TO_DISPLAY = 4
|
||||||
const val AMOUNT_START_MARGIN: Float = 2F
|
const val AMOUNT_START_MARGIN: Float = 2F
|
||||||
|
Loading…
Reference in New Issue
Block a user