Merge pull request #5145 from vector-im/feature/ons/fix_failed_maps_rendering
Fix location rendering in timeline if map cannot be loaded
This commit is contained in:
commit
150d557d39
|
@ -0,0 +1 @@
|
||||||
|
Fix location rendering in timeline if map cannot be loaded
|
|
@ -16,11 +16,19 @@
|
||||||
|
|
||||||
package im.vector.app.features.home.room.detail.timeline.item
|
package im.vector.app.features.home.room.detail.timeline.item
|
||||||
|
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
|
import android.widget.TextView
|
||||||
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
import com.airbnb.epoxy.EpoxyAttribute
|
import com.airbnb.epoxy.EpoxyAttribute
|
||||||
import com.airbnb.epoxy.EpoxyModelClass
|
import com.airbnb.epoxy.EpoxyModelClass
|
||||||
|
import com.bumptech.glide.load.DataSource
|
||||||
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||||
|
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.R
|
||||||
import im.vector.app.core.glide.GlideApp
|
import im.vector.app.core.glide.GlideApp
|
||||||
import im.vector.app.core.utils.DimensionConverter
|
import im.vector.app.core.utils.DimensionConverter
|
||||||
|
@ -63,14 +71,26 @@ abstract class MessageLocationItem : AbsMessageItem<MessageLocationItem.Holder>(
|
||||||
}
|
}
|
||||||
GlideApp.with(holder.staticMapImageView)
|
GlideApp.with(holder.staticMapImageView)
|
||||||
.load(location)
|
.load(location)
|
||||||
|
.apply(RequestOptions.centerCropTransform())
|
||||||
|
.listener(object : RequestListener<Drawable> {
|
||||||
|
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
|
||||||
|
holder.staticMapPinImageView.setImageResource(R.drawable.ic_location_pin_failed)
|
||||||
|
holder.staticMapErrorTextView.isVisible = true
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||||
|
locationPinProvider?.create(userId) { pinDrawable ->
|
||||||
|
GlideApp.with(holder.staticMapPinImageView)
|
||||||
|
.load(pinDrawable)
|
||||||
|
.into(holder.staticMapPinImageView)
|
||||||
|
}
|
||||||
|
holder.staticMapErrorTextView.isVisible = false
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
.transform(imageCornerTransformation)
|
.transform(imageCornerTransformation)
|
||||||
.into(holder.staticMapImageView)
|
.into(holder.staticMapImageView)
|
||||||
|
|
||||||
locationPinProvider?.create(userId) { pinDrawable ->
|
|
||||||
GlideApp.with(holder.staticMapPinImageView)
|
|
||||||
.load(pinDrawable)
|
|
||||||
.into(holder.staticMapPinImageView)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getViewStubId() = STUB_ID
|
override fun getViewStubId() = STUB_ID
|
||||||
|
@ -78,6 +98,7 @@ abstract class MessageLocationItem : AbsMessageItem<MessageLocationItem.Holder>(
|
||||||
class Holder : AbsMessageItem.Holder(STUB_ID) {
|
class Holder : AbsMessageItem.Holder(STUB_ID) {
|
||||||
val staticMapImageView by bind<ImageView>(R.id.staticMapImageView)
|
val staticMapImageView by bind<ImageView>(R.id.staticMapImageView)
|
||||||
val staticMapPinImageView by bind<ImageView>(R.id.staticMapPinImageView)
|
val staticMapPinImageView by bind<ImageView>(R.id.staticMapPinImageView)
|
||||||
|
val staticMapErrorTextView by bind<TextView>(R.id.staticMapErrorTextView)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="70dp"
|
||||||
|
android:height="70dp"
|
||||||
|
android:viewportWidth="70"
|
||||||
|
android:viewportHeight="70">
|
||||||
|
<path
|
||||||
|
android:pathData="M34.9997,5.8335C23.7122,5.8335 14.583,15.2112 14.583,26.8059C14.583,39.2995 27.4747,56.5269 32.783,63.0882C33.9497,64.5264 36.0788,64.5264 37.2455,63.0882C42.5247,56.5269 55.4163,39.2995 55.4163,26.8059C55.4163,15.2112 46.2872,5.8335 34.9997,5.8335ZM34.9997,34.2961C30.9747,34.2961 27.708,30.9405 27.708,26.8059C27.708,22.6714 30.9747,19.3158 34.9997,19.3158C39.0247,19.3158 42.2913,22.6714 42.2913,26.8059C42.2913,30.9405 39.0247,34.2961 34.9997,34.2961Z"
|
||||||
|
android:fillColor="#C1C6CD"/>
|
||||||
|
</vector>
|
|
@ -1,5 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
@ -30,4 +29,20 @@
|
||||||
app:layout_constraintStart_toStartOf="@id/staticMapImageView"
|
app:layout_constraintStart_toStartOf="@id/staticMapImageView"
|
||||||
app:layout_constraintTop_toTopOf="@id/staticMapImageView" />
|
app:layout_constraintTop_toTopOf="@id/staticMapImageView" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/staticMapErrorTextView"
|
||||||
|
style="@style/Widget.Vector.TextView.Subtitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal|bottom"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginBottom="54dp"
|
||||||
|
android:text="@string/location_timeline_failed_to_load_map"
|
||||||
|
android:textColor="?vctr_content_tertiary"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintEnd_toEndOf="@id/staticMapPinImageView"
|
||||||
|
app:layout_constraintStart_toStartOf="@id/staticMapPinImageView"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/staticMapPinImageView"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
|
@ -3767,6 +3767,7 @@
|
||||||
<string name="settings_enable_location_sharing">Enable location sharing</string>
|
<string name="settings_enable_location_sharing">Enable location sharing</string>
|
||||||
<string name="settings_enable_location_sharing_summary">Once enabled you will be able to send your location to any room</string>
|
<string name="settings_enable_location_sharing_summary">Once enabled you will be able to send your location to any room</string>
|
||||||
<string name="labs_render_locations_in_timeline">Render user locations in the timeline</string>
|
<string name="labs_render_locations_in_timeline">Render user locations in the timeline</string>
|
||||||
|
<string name="location_timeline_failed_to_load_map">Failed to load map</string>
|
||||||
|
|
||||||
<string name="message_bubbles">Show Message bubbles</string>
|
<string name="message_bubbles">Show Message bubbles</string>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue