diff --git a/changelog.d/4278.feature b/changelog.d/4278.feature
new file mode 100644
index 0000000000..fe82755186
--- /dev/null
+++ b/changelog.d/4278.feature
@@ -0,0 +1 @@
+Updates URL previews to match latest designs
\ No newline at end of file
diff --git a/library/ui-styles/src/main/res/values/dimens.xml b/library/ui-styles/src/main/res/values/dimens.xml
index 519920786c..864f3d3d7f 100644
--- a/library/ui-styles/src/main/res/values/dimens.xml
+++ b/library/ui-styles/src/main/res/values/dimens.xml
@@ -39,4 +39,7 @@
320dp
+
+
+ 8dp
\ No newline at end of file
diff --git a/vector/src/main/java/im/vector/app/core/ui/views/SendStateImageView.kt b/vector/src/main/java/im/vector/app/core/ui/views/SendStateImageView.kt
index cb1d08d2e5..3d710e2b24 100644
--- a/vector/src/main/java/im/vector/app/core/ui/views/SendStateImageView.kt
+++ b/vector/src/main/java/im/vector/app/core/ui/views/SendStateImageView.kt
@@ -20,7 +20,7 @@ import android.content.Context
import android.content.res.ColorStateList
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageView
-import androidx.core.view.isVisible
+import androidx.core.view.isInvisible
import im.vector.app.R
import im.vector.app.features.home.room.detail.timeline.item.SendStateDecoration
import im.vector.app.features.themes.ThemeUtils
@@ -38,28 +38,28 @@ class SendStateImageView @JvmOverloads constructor(
}
fun render(sendState: SendStateDecoration) {
- isVisible = when (sendState) {
+ isInvisible = when (sendState) {
SendStateDecoration.SENDING_NON_MEDIA -> {
setImageResource(R.drawable.ic_sending_message)
imageTintList = ColorStateList.valueOf(ThemeUtils.getColor(context, R.attr.vctr_content_tertiary))
contentDescription = context.getString(R.string.event_status_a11y_sending)
- true
+ false
}
SendStateDecoration.SENT -> {
setImageResource(R.drawable.ic_message_sent)
imageTintList = ColorStateList.valueOf(ThemeUtils.getColor(context, R.attr.vctr_content_tertiary))
contentDescription = context.getString(R.string.event_status_a11y_sent)
- true
+ false
}
SendStateDecoration.FAILED -> {
setImageResource(R.drawable.ic_sending_message_failed)
imageTintList = null
contentDescription = context.getString(R.string.event_status_a11y_failed)
- true
+ false
}
SendStateDecoration.SENDING_MEDIA,
SendStateDecoration.NONE -> {
- false
+ true
}
}
}
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/BaseEventItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/BaseEventItem.kt
index 6aeb1519a9..5dfbf5d8f6 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/BaseEventItem.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/BaseEventItem.kt
@@ -43,22 +43,12 @@ abstract class BaseEventItem : VectorEpoxyModel
@EpoxyAttribute(EpoxyAttribute.Option.DoNotHash)
lateinit var dimensionConverter: DimensionConverter
- protected var ignoreSendStatusVisibility = false
-
@CallSuper
override fun bind(holder: H) {
super.bind(holder)
holder.leftGuideline.updateLayoutParams {
this.marginStart = leftGuideline
}
- // Ignore visibility of the send status icon?
- holder.contentContainer.updateLayoutParams {
- if (ignoreSendStatusVisibility) {
- addRule(RelativeLayout.ALIGN_PARENT_END)
- } else {
- removeRule(RelativeLayout.ALIGN_PARENT_END)
- }
- }
holder.checkableBackground.isChecked = highlighted
}
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceItem.kt
index fb7d0cabd5..f006c2aa35 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceItem.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceItem.kt
@@ -33,10 +33,6 @@ import im.vector.app.features.home.room.detail.timeline.helper.VoiceMessagePlayb
@EpoxyModelClass(layout = R.layout.item_timeline_event_base)
abstract class MessageVoiceItem : AbsMessageItem() {
- init {
- ignoreSendStatusVisibility = true
- }
-
@EpoxyAttribute
var mxcUrl: String = ""
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlView.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlView.kt
index 3e08ce5589..631f00819c 100755
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlView.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlView.kt
@@ -19,13 +19,14 @@ package im.vector.app.features.home.room.detail.timeline.url
import android.content.Context
import android.util.AttributeSet
import android.view.View
-import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
+import com.google.android.material.card.MaterialCardView
import im.vector.app.R
import im.vector.app.core.extensions.setTextOrHide
import im.vector.app.databinding.ViewUrlPreviewBinding
import im.vector.app.features.home.room.detail.timeline.TimelineEventController
import im.vector.app.features.media.ImageContentRenderer
+import im.vector.app.features.themes.ThemeUtils
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.session.media.PreviewUrlData
@@ -36,7 +37,7 @@ class PreviewUrlView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
-) : ConstraintLayout(context, attrs, defStyleAttr), View.OnClickListener {
+) : MaterialCardView(context, attrs, defStyleAttr), View.OnClickListener {
private lateinit var views: ViewUrlPreviewBinding
@@ -44,6 +45,9 @@ class PreviewUrlView @JvmOverloads constructor(
init {
setupView()
+ radius = resources.getDimensionPixelSize(R.dimen.preview_url_view_corner_radius).toFloat()
+ cardElevation = 0f
+ setCardBackgroundColor(ThemeUtils.getColor(context, R.attr.vctr_system))
}
private var state: PreviewUrlUiState = PreviewUrlUiState.Unknown
@@ -121,9 +125,15 @@ class PreviewUrlView @JvmOverloads constructor(
private fun renderData(previewUrlData: PreviewUrlData, imageContentRenderer: ImageContentRenderer) {
isVisible = true
+
views.urlPreviewTitle.setTextOrHide(previewUrlData.title)
views.urlPreviewImage.isVisible = previewUrlData.mxcUrl?.let { imageContentRenderer.render(it, views.urlPreviewImage) }.orFalse()
views.urlPreviewDescription.setTextOrHide(previewUrlData.description)
+ views.urlPreviewDescription.maxLines = when {
+ previewUrlData.mxcUrl != null -> 2
+ previewUrlData.title != null -> 3
+ else -> 5
+ }
views.urlPreviewSite.setTextOrHide(previewUrlData.siteName.takeIf { it != previewUrlData.title })
}
diff --git a/vector/src/main/res/drawable/ic_close_with_circular_bg.xml b/vector/src/main/res/drawable/ic_close_with_circular_bg.xml
new file mode 100644
index 0000000000..5e54b638a0
--- /dev/null
+++ b/vector/src/main/res/drawable/ic_close_with_circular_bg.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/vector/src/main/res/layout/item_timeline_event_base.xml b/vector/src/main/res/layout/item_timeline_event_base.xml
index ed6e501d49..6d3d3e8cd5 100644
--- a/vector/src/main/res/layout/item_timeline_event_base.xml
+++ b/vector/src/main/res/layout/item_timeline_event_base.xml
@@ -80,6 +80,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/messageMemberNameView"
+ android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/messageSendStateImageView"
android:layout_toEndOf="@id/messageStartGuideline"
android:addStatesFromChildren="true">
@@ -115,27 +116,23 @@
android:id="@+id/messageContentRedactedStub"
style="@style/TimelineContentStubBaseParams"
android:layout_height="wrap_content"
- android:layout_marginEnd="56dp"
android:layout="@layout/item_timeline_event_redacted_stub" />
@@ -152,7 +149,7 @@
android:layout_marginBottom="4dp"
android:contentDescription="@string/event_status_a11y_sending"
android:src="@drawable/ic_sending_message"
- android:visibility="gone"
+ android:visibility="invisible"
tools:tint="?vctr_content_tertiary"
tools:visibility="visible" />
diff --git a/vector/src/main/res/layout/item_timeline_event_text_message_stub.xml b/vector/src/main/res/layout/item_timeline_event_text_message_stub.xml
index 39df45989c..8d4bfcf14e 100644
--- a/vector/src/main/res/layout/item_timeline_event_text_message_stub.xml
+++ b/vector/src/main/res/layout/item_timeline_event_text_message_stub.xml
@@ -16,7 +16,7 @@
+ tools:parentTag="com.google.android.material.card.MaterialCardView">
-
-
-
+ android:orientation="vertical">
-
+
-
+
-
+
+
+
+
+
\ No newline at end of file