[sec-merge related] Render encryption warnings for all layouts again

Change-Id: I3af2a350af2988803f7114d1652a85dd3f75681d
This commit is contained in:
SpiritCroc 2022-09-28 11:58:01 +02:00
parent 97d0dbcfb8
commit 0b917fc935
6 changed files with 42 additions and 17 deletions

View File

@ -33,7 +33,6 @@ import im.vector.app.R
import im.vector.app.core.epoxy.ClickListener import im.vector.app.core.epoxy.ClickListener
import im.vector.app.core.epoxy.onClick import im.vector.app.core.epoxy.onClick
import im.vector.app.core.extensions.getDrawableAsSpannable import im.vector.app.core.extensions.getDrawableAsSpannable
import im.vector.app.core.ui.views.BubbleDependentView
import im.vector.app.core.ui.views.ShieldImageView import im.vector.app.core.ui.views.ShieldImageView
import im.vector.app.core.utils.DimensionConverter import im.vector.app.core.utils.DimensionConverter
import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.home.AvatarRenderer
@ -42,6 +41,7 @@ import im.vector.app.features.home.room.detail.timeline.TimelineEventController
import im.vector.app.features.home.room.detail.timeline.helper.AvatarSizeProvider import im.vector.app.features.home.room.detail.timeline.helper.AvatarSizeProvider
import im.vector.app.features.home.room.detail.timeline.style.TimelineMessageLayout import im.vector.app.features.home.room.detail.timeline.style.TimelineMessageLayout
import im.vector.app.features.home.room.detail.timeline.view.TimelineMessageLayoutRenderer import im.vector.app.features.home.room.detail.timeline.view.TimelineMessageLayoutRenderer
import im.vector.app.features.home.room.detail.timeline.view.infoInBubbles
import im.vector.app.features.home.room.detail.timeline.view.scRenderMessageLayout import im.vector.app.features.home.room.detail.timeline.view.scRenderMessageLayout
import im.vector.app.features.reactions.widget.ReactionButton import im.vector.app.features.reactions.widget.ReactionButton
import im.vector.app.features.themes.ThemeUtils import im.vector.app.features.themes.ThemeUtils
@ -85,8 +85,8 @@ abstract class AbsBaseMessageItem<H : AbsBaseMessageItem.Holder>(@LayoutRes layo
override fun bind(holder: H) { override fun bind(holder: H) {
super.bind(holder) super.bind(holder)
renderReactions(holder, baseAttributes.informationData.reactionsSummary) renderReactions(holder, baseAttributes.informationData.reactionsSummary)
if (baseAttributes.informationData.messageLayout.showE2eDecoration) { if (!baseAttributes.informationData.messageLayout.showsE2eDecorationInFooter()) {
holder.e2EDecorationView.renderE2EDecoration(baseAttributes.informationData.e2eDecoration) holder.getEffectiveE2eDecorationView().renderE2EDecoration(baseAttributes.informationData.e2eDecoration)
} }
holder.view.onClick(baseAttributes.itemClickListener) holder.view.onClick(baseAttributes.itemClickListener)
holder.view.setOnLongClickListener(baseAttributes.itemLongClickListener) holder.view.setOnLongClickListener(baseAttributes.itemLongClickListener)
@ -190,6 +190,8 @@ abstract class AbsBaseMessageItem<H : AbsBaseMessageItem.Holder>(@LayoutRes layo
val reactionsContainer by bind<ViewGroup>(R.id.reactionsContainer) val reactionsContainer by bind<ViewGroup>(R.id.reactionsContainer)
val informationBottom by bind<ViewGroup>(R.id.informationBottom) val informationBottom by bind<ViewGroup>(R.id.informationBottom)
val e2EDecorationView by bind<ShieldImageView>(R.id.messageE2EDecoration) val e2EDecorationView by bind<ShieldImageView>(R.id.messageE2EDecoration)
open fun getEffectiveE2eDecorationView() = e2EDecorationView
} }
/** /**

View File

@ -30,7 +30,6 @@ import im.vector.app.features.home.room.detail.timeline.TimelineEventController
import im.vector.app.features.home.room.detail.timeline.view.TimelineMessageLayoutRenderer import im.vector.app.features.home.room.detail.timeline.view.TimelineMessageLayoutRenderer
import im.vector.app.features.home.room.detail.timeline.view.scOnlyRenderMessageLayout import im.vector.app.features.home.room.detail.timeline.view.scOnlyRenderMessageLayout
import im.vector.lib.core.utils.epoxy.charsequence.EpoxyCharSequence import im.vector.lib.core.utils.epoxy.charsequence.EpoxyCharSequence
import org.matrix.android.sdk.api.session.crypto.model.RoomEncryptionTrustLevel
@EpoxyModelClass @EpoxyModelClass
abstract class NoticeItem : BaseEventItem<NoticeItem.Holder>(R.layout.item_timeline_event_base_noinfo) { abstract class NoticeItem : BaseEventItem<NoticeItem.Holder>(R.layout.item_timeline_event_base_noinfo) {
@ -45,7 +44,7 @@ abstract class NoticeItem : BaseEventItem<NoticeItem.Holder>(R.layout.item_timel
holder.view.setOnLongClickListener(attributes.itemLongClickListener) holder.view.setOnLongClickListener(attributes.itemLongClickListener)
holder.avatarImageView.onClick(attributes.avatarClickListener) holder.avatarImageView.onClick(attributes.avatarClickListener)
if (attributes.informationData.messageLayout.showE2eDecoration) { if (!attributes.informationData.messageLayout.showsE2eDecorationInFooter()) {
holder.e2EDecorationView.renderE2EDecoration(attributes.informationData.e2eDecoration) holder.e2EDecorationView.renderE2EDecoration(attributes.informationData.e2eDecoration)
} }

View File

@ -19,6 +19,7 @@ package im.vector.app.features.home.room.detail.timeline.style
import android.os.Parcelable import android.os.Parcelable
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import im.vector.app.R import im.vector.app.R
import im.vector.app.features.home.room.detail.timeline.view.infoInBubbles
import im.vector.app.features.themes.ScBubbleAppearance import im.vector.app.features.themes.ScBubbleAppearance
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
@ -28,14 +29,14 @@ sealed interface TimelineMessageLayout : Parcelable {
val showAvatar: Boolean val showAvatar: Boolean
val showDisplayName: Boolean val showDisplayName: Boolean
val showTimestamp: Boolean val showTimestamp: Boolean
val showE2eDecoration: Boolean
open fun showsE2eDecorationInFooter(): Boolean = false
@Parcelize @Parcelize
data class Default( data class Default(
override val showAvatar: Boolean, override val showAvatar: Boolean,
override val showDisplayName: Boolean, override val showDisplayName: Boolean,
override val showTimestamp: Boolean, override val showTimestamp: Boolean,
override val showE2eDecoration: Boolean,
// Keep defaultLayout generated on epoxy items // Keep defaultLayout generated on epoxy items
override val layoutRes: Int = 0, override val layoutRes: Int = 0,
) : TimelineMessageLayout ) : TimelineMessageLayout
@ -45,7 +46,6 @@ sealed interface TimelineMessageLayout : Parcelable {
override val showAvatar: Boolean, override val showAvatar: Boolean,
override val showDisplayName: Boolean, override val showDisplayName: Boolean,
override val showTimestamp: Boolean = true, override val showTimestamp: Boolean = true,
override val showE2eDecoration: Boolean = true,
val addTopMargin: Boolean = false, val addTopMargin: Boolean = false,
val isIncoming: Boolean, val isIncoming: Boolean,
val isPseudoBubble: Boolean, val isPseudoBubble: Boolean,
@ -73,7 +73,6 @@ sealed interface TimelineMessageLayout : Parcelable {
override val showAvatar: Boolean, override val showAvatar: Boolean,
override val showDisplayName: Boolean, override val showDisplayName: Boolean,
override val showTimestamp: Boolean = true, override val showTimestamp: Boolean = true,
override val showE2eDecoration: Boolean = false,
val bubbleAppearance: ScBubbleAppearance, val bubbleAppearance: ScBubbleAppearance,
val isIncoming: Boolean, val isIncoming: Boolean,
val reverseBubble: Boolean, val reverseBubble: Boolean,
@ -103,6 +102,8 @@ sealed interface TimelineMessageLayout : Parcelable {
bubbleAppearance.textBubbleIncomingNoTail bubbleAppearance.textBubbleIncomingNoTail
} }
} }
) : TimelineMessageLayout ) : TimelineMessageLayout {
override fun showsE2eDecorationInFooter(): Boolean = infoInBubbles(this)
}
} }

View File

@ -200,8 +200,7 @@ class TimelineMessageLayoutFactory @Inject constructor(
else -> TimelineMessageLayout.Default( else -> TimelineMessageLayout.Default(
showAvatar = false, showAvatar = false,
showDisplayName = false, showDisplayName = false,
showTimestamp = vectorPreferences.alwaysShowTimeStamps(), showTimestamp = vectorPreferences.alwaysShowTimeStamps()
showE2eDecoration = false
) )
} }
} }
@ -249,12 +248,11 @@ class TimelineMessageLayoutFactory @Inject constructor(
return messageContent?.msgType in MSG_TYPES_WITHOUT_BUBBLE_LAYOUT return messageContent?.msgType in MSG_TYPES_WITHOUT_BUBBLE_LAYOUT
} }
private fun buildModernLayout(showInformation: Boolean, forScBubbles: Boolean = false): TimelineMessageLayout.Default { private fun buildModernLayout(showInformation: Boolean): TimelineMessageLayout.Default {
return TimelineMessageLayout.Default( return TimelineMessageLayout.Default(
showAvatar = showInformation, showAvatar = showInformation,
showDisplayName = showInformation, showDisplayName = showInformation,
showTimestamp = showInformation || vectorPreferences.alwaysShowTimeStamps(), showTimestamp = showInformation || vectorPreferences.alwaysShowTimeStamps()
showE2eDecoration = !forScBubbles
) )
} }

View File

@ -24,6 +24,7 @@ import im.vector.app.databinding.ViewMessageBubbleScBinding
import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem
import im.vector.app.features.home.room.detail.timeline.item.AnonymousReadReceipt import im.vector.app.features.home.room.detail.timeline.item.AnonymousReadReceipt
import im.vector.app.features.home.room.detail.timeline.item.BaseEventItem import im.vector.app.features.home.room.detail.timeline.item.BaseEventItem
import im.vector.app.features.home.room.detail.timeline.item.E2EDecoration
import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData
import im.vector.app.features.home.room.detail.timeline.item.SendStateDecoration import im.vector.app.features.home.room.detail.timeline.item.SendStateDecoration
import im.vector.app.features.home.room.detail.timeline.style.TimelineMessageLayout import im.vector.app.features.home.room.detail.timeline.style.TimelineMessageLayout
@ -207,6 +208,10 @@ class ScMessageBubbleWrapView @JvmOverloads constructor(context: Context, attrs:
views.eventSendingIndicator.isVisible = attributes.informationData.sendStateDecoration == SendStateDecoration.SENDING_MEDIA views.eventSendingIndicator.isVisible = attributes.informationData.sendStateDecoration == SendStateDecoration.SENDING_MEDIA
} }
if (attributes.informationData.messageLayout.showsE2eDecorationInFooter()) {
views.bubbleFooterMessageE2EDecoration.renderE2EDecoration(attributes.informationData.e2eDecoration)
}
return true return true
} }
@ -497,8 +502,18 @@ class ScMessageBubbleWrapView @JvmOverloads constructor(context: Context, attrs:
views.bubbleFooterReadReceipt.paddingBottom views.bubbleFooterReadReceipt.paddingBottom
} }
var footerWidth = timeWidth + readReceiptWidth val e2eWidth: Int
var footerHeight = max(timeHeight, readReceiptHeight) val e2eHeight: Int
if (informationData?.e2eDecoration in listOf(null, E2EDecoration.NONE)) {
e2eWidth = 0
e2eHeight = 0
} else {
e2eWidth = views.bubbleFooterMessageE2EDecoration.layoutParams.width + views.bubbleFooterMessageE2EDecoration.paddingLeft + views.bubbleFooterMessageE2EDecoration.paddingRight
e2eHeight = views.bubbleFooterMessageE2EDecoration.layoutParams.height + views.bubbleFooterMessageE2EDecoration.paddingTop + views.bubbleFooterMessageE2EDecoration.paddingBottom
}
var footerWidth = timeWidth + readReceiptWidth + e2eWidth
var footerHeight = max(max(timeHeight, readReceiptHeight), e2eHeight)
// Reserve extra padding, if we do have actual content // Reserve extra padding, if we do have actual content
if (footerWidth > 0) { if (footerWidth > 0) {
footerWidth += views.bubbleFootView.paddingLeft + views.bubbleFootView.paddingRight footerWidth += views.bubbleFootView.paddingLeft + views.bubbleFootView.paddingRight

View File

@ -192,6 +192,16 @@
tools:tint="?vctr_content_secondary" tools:tint="?vctr_content_secondary"
tools:src="@drawable/ic_processing_msg" tools:src="@drawable/ic_processing_msg"
android:contentDescription="@string/footer_read_receipt_content_description" /> android:contentDescription="@string/footer_read_receipt_content_description" />
<im.vector.app.core.ui.views.ShieldImageView
android:id="@+id/bubbleFooterMessageE2EDecoration"
android:layout_width="16dp"
android:layout_height="16dp"
android:paddingStart="4dp"
android:paddingEnd="0dp"
android:layout_gravity="bottom"
android:visibility="gone"
tools:visibility="visible" />
</LinearLayout> </LinearLayout>
</RelativeLayout> </RelativeLayout>