mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-23 11:15:44 +00:00
Small tweaks for footer positioning.
This commit is contained in:
committed by
Greyson Parrelli
parent
dc37d1f029
commit
e1e3d7a85b
@@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.conversation.v2.items
|
||||
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Space
|
||||
import android.widget.TextView
|
||||
import com.google.android.material.imageview.ShapeableImageView
|
||||
import org.thoughtcrime.securesms.badges.BadgeImageView
|
||||
@@ -38,6 +39,7 @@ data class V2ConversationItemTextOnlyBindingBridge(
|
||||
val conversationItemFooterDate: TextView,
|
||||
val conversationItemFooterExpiry: ExpirationTimerView,
|
||||
val conversationItemFooterBackground: View,
|
||||
val conversationItemFooterSpace: Space?,
|
||||
val conversationItemAlert: AlertView?,
|
||||
val isIncoming: Boolean
|
||||
)
|
||||
@@ -60,6 +62,7 @@ fun V2ConversationItemTextOnlyIncomingBinding.bridge(): V2ConversationItemTextOn
|
||||
conversationItemFooterExpiry = conversationItemExpirationTimer,
|
||||
conversationItemFooterBackground = conversationItemFooterBackground,
|
||||
conversationItemAlert = null,
|
||||
conversationItemFooterSpace = null,
|
||||
isIncoming = false
|
||||
)
|
||||
}
|
||||
@@ -82,6 +85,7 @@ fun V2ConversationItemTextOnlyOutgoingBinding.bridge(): V2ConversationItemTextOn
|
||||
conversationItemFooterExpiry = conversationItemExpirationTimer,
|
||||
conversationItemFooterBackground = conversationItemFooterBackground,
|
||||
conversationItemAlert = conversationItemAlert,
|
||||
conversationItemFooterSpace = footerEndPad,
|
||||
isIncoming = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -9,8 +9,10 @@ import android.view.View
|
||||
import org.signal.core.util.dp
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.padding
|
||||
import org.thoughtcrime.securesms.util.visible
|
||||
import kotlin.math.max
|
||||
|
||||
/**
|
||||
* Logical delegate for determining the footer position for a particular conversation item.
|
||||
@@ -26,7 +28,12 @@ class V2FooterPositionDelegate private constructor(
|
||||
constructor(binding: V2ConversationItemTextOnlyBindingBridge) : this(
|
||||
binding.isIncoming,
|
||||
binding.root,
|
||||
listOfNotNull(binding.conversationItemFooterDate, binding.conversationItemDeliveryStatus, binding.conversationItemFooterExpiry),
|
||||
listOfNotNull(
|
||||
binding.conversationItemFooterDate,
|
||||
binding.conversationItemDeliveryStatus,
|
||||
binding.conversationItemFooterExpiry,
|
||||
binding.conversationItemFooterSpace
|
||||
),
|
||||
binding.conversationItemBodyWrapper,
|
||||
binding.conversationItemBody
|
||||
)
|
||||
@@ -43,7 +50,7 @@ class V2FooterPositionDelegate private constructor(
|
||||
override fun onPostMeasure(): Boolean {
|
||||
val maxWidth = root.measuredWidth - gutters
|
||||
val lastLineWidth = body.lastLineWidth
|
||||
val footerWidth = footerViews.sumOf { it.measuredWidth }
|
||||
val footerWidth = getFooterWidth()
|
||||
|
||||
if (footerViews.all { !it.visible }) {
|
||||
return false
|
||||
@@ -74,10 +81,6 @@ class V2FooterPositionDelegate private constructor(
|
||||
return
|
||||
}
|
||||
|
||||
footerViews.forEach {
|
||||
it.translationY = 0f
|
||||
}
|
||||
|
||||
bodyContainer.padding(right = 0, left = 0, bottom = footerViews.first().measuredHeight)
|
||||
displayState = DisplayState.UNDERNEATH
|
||||
}
|
||||
@@ -87,11 +90,8 @@ class V2FooterPositionDelegate private constructor(
|
||||
return
|
||||
}
|
||||
|
||||
footerViews.forEach {
|
||||
it.translationY = 0f
|
||||
}
|
||||
|
||||
val end = footerViews.sumOf { it.measuredWidth } + if (isIncoming) 4.dp else 8.dp
|
||||
val targetWidth = body.measuredWidth + getFooterWidth()
|
||||
val end = max(0, targetWidth - bodyContainer.measuredWidth) - 8.dp
|
||||
val (left, right) = if (bodyContainer.layoutDirection == View.LAYOUT_DIRECTION_LTR) {
|
||||
0 to end
|
||||
} else {
|
||||
@@ -107,14 +107,14 @@ class V2FooterPositionDelegate private constructor(
|
||||
return
|
||||
}
|
||||
|
||||
footerViews.forEach {
|
||||
it.translationY = 0f
|
||||
}
|
||||
|
||||
bodyContainer.padding(right = 0, left = 0, bottom = 0)
|
||||
displayState = DisplayState.TUCKED
|
||||
}
|
||||
|
||||
private fun getFooterWidth(): Int {
|
||||
return footerViews.sumOf { it.measuredWidth + ViewUtil.getLeftMargin(it) + ViewUtil.getRightMargin(it) }
|
||||
}
|
||||
|
||||
private enum class DisplayState {
|
||||
NONE,
|
||||
UNDERNEATH,
|
||||
|
||||
Reference in New Issue
Block a user