Refactor view visibilities
Reduce redundant code when having alternative views for the same information available for different styles. While we are at it: fix the setting view timestamps for all messages in dual-bubble mode (even though it looks bad with the current design). Change-Id: Id9598c6536c3cb5d93073e9d09485c009a53cd00
This commit is contained in:
parent
e29ca1256f
commit
e81a7211b2
@ -63,83 +63,87 @@ abstract class AbsMessageItem<H : AbsMessageItem.Holder> : AbsBaseMessageItem<H>
|
|||||||
override fun bind(holder: H) {
|
override fun bind(holder: H) {
|
||||||
super.bind(holder)
|
super.bind(holder)
|
||||||
val contentInBubble = infoInBubbles(holder.memberNameView.context)
|
val contentInBubble = infoInBubbles(holder.memberNameView.context)
|
||||||
if (attributes.informationData.showInformation and (!contentInBubble || !attributes.informationData.sentByMe)) {
|
|
||||||
holder.avatarImageView.layoutParams = holder.avatarImageView.layoutParams?.apply {
|
val avatarImageView: ImageView?
|
||||||
height = attributes.avatarSize
|
val memberNameView: TextView?
|
||||||
width = attributes.avatarSize
|
val timeView: TextView?
|
||||||
}
|
val hiddenViews = ArrayList<View>()
|
||||||
//holder.avatarImageView.visibility = View.VISIBLE
|
val invisibleViews = ArrayList<View>()
|
||||||
holder.avatarImageView.setOnClickListener(_avatarClickListener)
|
|
||||||
//holder.memberNameView.visibility = View.VISIBLE
|
// Select which views are visible, based on bubble style and other criteria
|
||||||
holder.memberNameView.setOnClickListener(_memberNameClickListener)
|
if (attributes.informationData.showInformation) {
|
||||||
holder.bubbleMemberNameView.setOnClickListener(_memberNameClickListener)
|
if (contentInBubble) {
|
||||||
//holder.timeView.visibility = View.VISIBLE
|
memberNameView = holder.bubbleMemberNameView
|
||||||
holder.timeView.text = attributes.informationData.time
|
timeView = holder.bubbleTimeView
|
||||||
holder.bubbleTimeView.text = attributes.informationData.time
|
hiddenViews.add(holder.memberNameView)
|
||||||
holder.memberNameView.text = attributes.informationData.memberName
|
hiddenViews.add(holder.timeView)
|
||||||
holder.bubbleMemberNameView.text = attributes.informationData.memberName
|
|
||||||
holder.memberNameView.setTextColor(attributes.getMemberNameColor())
|
|
||||||
holder.bubbleMemberNameView.setTextColor(attributes.getMemberNameColor())
|
|
||||||
attributes.avatarRenderer.render(attributes.informationData.matrixItem, holder.avatarImageView)
|
|
||||||
holder.avatarImageView.setOnLongClickListener(attributes.itemLongClickListener)
|
|
||||||
holder.memberNameView.setOnLongClickListener(attributes.itemLongClickListener)
|
|
||||||
holder.bubbleMemberNameView.setOnLongClickListener(attributes.itemLongClickListener)
|
|
||||||
if (hideSenderInformation()) {
|
|
||||||
holder.memberNameView.visibility = View.GONE
|
|
||||||
holder.timeView.visibility = View.GONE
|
|
||||||
holder.bubbleMemberNameView.visibility = View.GONE
|
|
||||||
holder.bubbleTimeView.visibility = View.GONE
|
|
||||||
if (attributes.informationData.isDirect) {
|
|
||||||
holder.avatarImageView.visibility = View.GONE
|
|
||||||
} else {
|
|
||||||
holder.avatarImageView.visibility = View.VISIBLE
|
|
||||||
}
|
|
||||||
} else if (contentInBubble) {
|
|
||||||
holder.memberNameView.visibility = View.GONE
|
|
||||||
holder.timeView.visibility = View.GONE
|
|
||||||
holder.bubbleMemberNameView.visibility = View.VISIBLE
|
|
||||||
holder.bubbleTimeView.visibility = View.VISIBLE
|
|
||||||
if (attributes.informationData.isDirect) {
|
|
||||||
holder.avatarImageView.visibility = View.GONE
|
|
||||||
} else {
|
|
||||||
holder.avatarImageView.visibility = View.VISIBLE
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
holder.memberNameView.visibility = View.VISIBLE
|
memberNameView = holder.memberNameView
|
||||||
holder.timeView.visibility = View.VISIBLE
|
timeView = holder.timeView
|
||||||
holder.bubbleMemberNameView.visibility = View.GONE
|
hiddenViews.add(holder.bubbleMemberNameView)
|
||||||
holder.bubbleTimeView.visibility = View.GONE
|
hiddenViews.add(holder.bubbleTimeView)
|
||||||
holder.avatarImageView.visibility = View.VISIBLE
|
}
|
||||||
|
} else if (attributes.informationData.forceShowTimestamp) {
|
||||||
|
memberNameView = null
|
||||||
|
//hiddenViews.add(holder.memberNameView) // this one get's some special hiding treatment below
|
||||||
|
hiddenViews.add(holder.bubbleMemberNameView)
|
||||||
|
if (contentInBubble) {
|
||||||
|
timeView = holder.bubbleTimeView
|
||||||
|
hiddenViews.add(holder.timeView)
|
||||||
|
|
||||||
|
hiddenViews.add(holder.memberNameView)
|
||||||
|
} else {
|
||||||
|
timeView = holder.timeView
|
||||||
|
hiddenViews.add(holder.bubbleTimeView)
|
||||||
|
|
||||||
|
// Set to INVISIBLE instead of adding to hiddenViews, which are set to GONE
|
||||||
|
// (upstream sets memberNameView.isInvisible = true here, which is effectively the same)
|
||||||
|
invisibleViews.add(holder.memberNameView)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
holder.avatarImageView.setOnClickListener(null)
|
memberNameView = null
|
||||||
holder.memberNameView.setOnClickListener(null)
|
hiddenViews.add(holder.memberNameView)
|
||||||
holder.avatarImageView.visibility = View.GONE
|
hiddenViews.add(holder.bubbleMemberNameView)
|
||||||
if (attributes.informationData.forceShowTimestamp) {
|
timeView = null
|
||||||
holder.memberNameView.isInvisible = true
|
hiddenViews.add(holder.timeView)
|
||||||
holder.timeView.isVisible = true
|
hiddenViews.add(holder.bubbleTimeView)
|
||||||
holder.timeView.text = attributes.informationData.time
|
|
||||||
} else {
|
|
||||||
holder.memberNameView.isVisible = false
|
|
||||||
holder.timeView.isVisible = false
|
|
||||||
}
|
|
||||||
holder.avatarImageView.setOnLongClickListener(null)
|
|
||||||
holder.memberNameView.setOnLongClickListener(null)
|
|
||||||
if (attributes.informationData.showInformation && !hideSenderInformation()/* && contentInBubble && attributes.informationData.sentByMe */) {
|
|
||||||
holder.bubbleTimeView.visibility = View.VISIBLE
|
|
||||||
holder.bubbleTimeView.text = attributes.informationData.time
|
|
||||||
holder.bubbleMemberNameView.visibility = View.VISIBLE
|
|
||||||
holder.bubbleMemberNameView.setOnClickListener(_memberNameClickListener)
|
|
||||||
holder.bubbleMemberNameView.text = attributes.informationData.memberName
|
|
||||||
holder.bubbleMemberNameView.setTextColor(attributes.getMemberNameColor())
|
|
||||||
holder.bubbleMemberNameView.setOnLongClickListener(attributes.itemLongClickListener)
|
|
||||||
} else {
|
|
||||||
holder.bubbleTimeView.visibility = View.GONE
|
|
||||||
holder.bubbleMemberNameView.setOnClickListener(null)
|
|
||||||
holder.bubbleMemberNameView.visibility = View.GONE
|
|
||||||
holder.bubbleMemberNameView.setOnLongClickListener(null)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// Dual-side bubbles: hide own avatar, and all in direct chats
|
||||||
|
if ((!attributes.informationData.showInformation) ||
|
||||||
|
(contentInBubble && (attributes.informationData.sentByMe || attributes.informationData.isDirect))) {
|
||||||
|
avatarImageView = null
|
||||||
|
hiddenViews.add(holder.avatarImageView)
|
||||||
|
} else {
|
||||||
|
avatarImageView = holder.avatarImageView
|
||||||
|
}
|
||||||
|
|
||||||
|
hiddenViews.forEach {
|
||||||
|
// Same as it.isVisible = false
|
||||||
|
it.visibility = View.GONE
|
||||||
|
}
|
||||||
|
invisibleViews.forEach {
|
||||||
|
// Same as it.isInvisible = true
|
||||||
|
it.visibility = View.INVISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
|
// Views available in upstream Element
|
||||||
|
avatarImageView?.layoutParams = avatarImageView?.layoutParams?.apply {
|
||||||
|
height = attributes.avatarSize
|
||||||
|
width = attributes.avatarSize
|
||||||
|
}
|
||||||
|
avatarImageView?.visibility = View.VISIBLE
|
||||||
|
avatarImageView?.setOnClickListener(_avatarClickListener)
|
||||||
|
memberNameView?.visibility = View.VISIBLE
|
||||||
|
memberNameView?.setOnClickListener(_memberNameClickListener)
|
||||||
|
timeView?.visibility = View.VISIBLE
|
||||||
|
timeView?.text = attributes.informationData.time
|
||||||
|
memberNameView?.text = attributes.informationData.memberName
|
||||||
|
memberNameView?.setTextColor(attributes.getMemberNameColor())
|
||||||
|
if (avatarImageView != null) attributes.avatarRenderer.render(attributes.informationData.matrixItem, avatarImageView)
|
||||||
|
avatarImageView?.setOnLongClickListener(attributes.itemLongClickListener)
|
||||||
|
memberNameView?.setOnLongClickListener(attributes.itemLongClickListener)
|
||||||
|
|
||||||
|
// Views added by Schildi
|
||||||
holder.viewStubContainer.minimumWidth = getViewStubMinimumWidth(holder, contentInBubble, attributes.informationData.showInformation)
|
holder.viewStubContainer.minimumWidth = getViewStubMinimumWidth(holder, contentInBubble, attributes.informationData.showInformation)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,10 +231,6 @@ abstract class AbsMessageItem<H : AbsMessageItem.Holder> : AbsBaseMessageItem<H>
|
|||||||
return attributes.informationData.sentByMe
|
return attributes.informationData.sentByMe
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hideSenderInformation(): Boolean {
|
|
||||||
return pseudoBubbleAllowed() && false
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun getBubbleMargin(density: Float, reverseBubble: Boolean): Int {
|
open fun getBubbleMargin(density: Float, reverseBubble: Boolean): Int {
|
||||||
return round(96*density).toInt()
|
return round(96*density).toInt()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user