From a7678241f25d1eb8ffea901bce80cab244d69ac9 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 3 Feb 2022 16:17:33 +0300 Subject: [PATCH] Fix location rendering in timeline if map cannot be loaded. --- changelog.d/5143.bugfix | 1 + .../timeline/item/MessageLocationItem.kt | 31 +++++++++++++++---- .../res/drawable/ic_location_pin_failed.xml | 9 ++++++ .../item_timeline_event_location_stub.xml | 13 ++++++++ vector/src/main/res/values/strings.xml | 1 + 5 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 changelog.d/5143.bugfix create mode 100644 vector/src/main/res/drawable/ic_location_pin_failed.xml diff --git a/changelog.d/5143.bugfix b/changelog.d/5143.bugfix new file mode 100644 index 0000000000..ba8f42b6cb --- /dev/null +++ b/changelog.d/5143.bugfix @@ -0,0 +1 @@ +Fix location rendering in timeline if map cannot be loaded \ No newline at end of file diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageLocationItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageLocationItem.kt index 6f0b6abb72..dea1ca21be 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageLocationItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageLocationItem.kt @@ -16,10 +16,17 @@ package im.vector.app.features.home.room.detail.timeline.item +import android.graphics.drawable.Drawable import android.widget.ImageView +import android.widget.TextView +import androidx.core.view.isVisible import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyModelClass +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.Target import im.vector.app.R import im.vector.app.core.glide.GlideApp import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider @@ -46,13 +53,24 @@ abstract class MessageLocationItem : AbsMessageItem( GlideApp.with(holder.staticMapImageView) .load(location) .apply(RequestOptions.centerCropTransform()) - .into(holder.staticMapImageView) + .listener(object : RequestListener { + override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { + holder.staticMapPinImageView.setImageResource(R.drawable.ic_location_pin_failed) + holder.staticMapErrorTextView.isVisible = true + return false + } - locationPinProvider?.create(locationOwnerId) { pinDrawable -> - GlideApp.with(holder.staticMapPinImageView) - .load(pinDrawable) - .into(holder.staticMapPinImageView) - } + override fun onResourceReady(resource: Drawable?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { + locationPinProvider?.create(locationOwnerId) { pinDrawable -> + GlideApp.with(holder.staticMapPinImageView) + .load(pinDrawable) + .into(holder.staticMapPinImageView) + } + holder.staticMapErrorTextView.isVisible = false + return false + } + }) + .into(holder.staticMapImageView) } override fun getViewType() = STUB_ID @@ -60,6 +78,7 @@ abstract class MessageLocationItem : AbsMessageItem( class Holder : AbsMessageItem.Holder(STUB_ID) { val staticMapImageView by bind(R.id.staticMapImageView) val staticMapPinImageView by bind(R.id.staticMapPinImageView) + val staticMapErrorTextView by bind(R.id.staticMapErrorTextView) } companion object { diff --git a/vector/src/main/res/drawable/ic_location_pin_failed.xml b/vector/src/main/res/drawable/ic_location_pin_failed.xml new file mode 100644 index 0000000000..250d048836 --- /dev/null +++ b/vector/src/main/res/drawable/ic_location_pin_failed.xml @@ -0,0 +1,9 @@ + + + diff --git a/vector/src/main/res/layout/item_timeline_event_location_stub.xml b/vector/src/main/res/layout/item_timeline_event_location_stub.xml index 316470b5f1..3074dc8e84 100644 --- a/vector/src/main/res/layout/item_timeline_event_location_stub.xml +++ b/vector/src/main/res/layout/item_timeline_event_location_stub.xml @@ -2,6 +2,7 @@ @@ -21,4 +22,16 @@ android:importantForAccessibility="no" android:src="@drawable/bg_map_user_pin" /> + + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 67f3a08e5f..3907605319 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -3756,6 +3756,7 @@ Enable location sharing Once enabled you will be able to send your location to any room Render user locations in the timeline + Failed to load map Open camera Send images and videos