Fix recyclerview issues on async map functions.

This commit is contained in:
Onuray Sahin 2022-01-12 15:14:13 +03:00
parent 9ea30445ef
commit ae8ca5356f
3 changed files with 20 additions and 10 deletions

View File

@ -73,7 +73,6 @@ import im.vector.app.features.html.PillsPostProcessor
import im.vector.app.features.html.SpanUtils import im.vector.app.features.html.SpanUtils
import im.vector.app.features.html.VectorHtmlCompressor import im.vector.app.features.html.VectorHtmlCompressor
import im.vector.app.features.location.LocationData import im.vector.app.features.location.LocationData
import im.vector.app.features.location.VectorMapView
import im.vector.app.features.media.ImageContentRenderer import im.vector.app.features.media.ImageContentRenderer
import im.vector.app.features.media.VideoContentRenderer import im.vector.app.features.media.VideoContentRenderer
import me.gujun.android.span.span import me.gujun.android.span.span
@ -192,11 +191,9 @@ class MessageItemFactory @Inject constructor(
val locationData = LocationData.create(geoUri) val locationData = LocationData.create(geoUri)
val mapCallback: MessageLocationItem.Callback = object : MessageLocationItem.Callback { val mapCallback: MessageLocationItem.Callback = object : MessageLocationItem.Callback {
override fun onMapReady(mapView: VectorMapView) { override fun onMapClicked() {
mapView.onClick { locationData?.let {
locationData?.let { callback?.onTimelineItemAction(RoomDetailAction.ShowLocation(it, informationData.senderId))
callback?.onTimelineItemAction(RoomDetailAction.ShowLocation(it, informationData.senderId))
}
} }
} }
} }

View File

@ -16,21 +16,22 @@
package im.vector.app.features.home.room.detail.timeline.item package im.vector.app.features.home.room.detail.timeline.item
import android.widget.FrameLayout
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyAttribute
import com.airbnb.epoxy.EpoxyModelClass import com.airbnb.epoxy.EpoxyModelClass
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.epoxy.onClick
import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider
import im.vector.app.features.location.LocationData import im.vector.app.features.location.LocationData
import im.vector.app.features.location.MapTilerMapView import im.vector.app.features.location.MapTilerMapView
import im.vector.app.features.location.VectorMapListener import im.vector.app.features.location.VectorMapListener
import im.vector.app.features.location.VectorMapView
@EpoxyModelClass(layout = R.layout.item_timeline_event_base) @EpoxyModelClass(layout = R.layout.item_timeline_event_base)
abstract class MessageLocationItem : AbsMessageItem<MessageLocationItem.Holder>() { abstract class MessageLocationItem : AbsMessageItem<MessageLocationItem.Holder>() {
interface Callback { interface Callback {
fun onMapReady(mapView: VectorMapView) fun onMapClicked()
} }
@EpoxyAttribute @EpoxyAttribute
@ -52,6 +53,10 @@ abstract class MessageLocationItem : AbsMessageItem<MessageLocationItem.Holder>(
val location = locationData ?: return val location = locationData ?: return
val locationOwnerId = userId ?: return val locationOwnerId = userId ?: return
holder.clickableMapArea.onClick {
callback?.onMapClicked()
}
holder.mapView.apply { holder.mapView.apply {
initialize(object : VectorMapListener { initialize(object : VectorMapListener {
override fun onMapReady() { override fun onMapReady() {
@ -61,8 +66,6 @@ abstract class MessageLocationItem : AbsMessageItem<MessageLocationItem.Holder>(
addPinToMap(locationOwnerId, pinDrawable) addPinToMap(locationOwnerId, pinDrawable)
updatePinLocation(locationOwnerId, location.latitude, location.longitude) updatePinLocation(locationOwnerId, location.latitude, location.longitude)
} }
callback?.onMapReady(this@apply)
} }
}) })
} }
@ -73,6 +76,7 @@ abstract class MessageLocationItem : AbsMessageItem<MessageLocationItem.Holder>(
class Holder : AbsMessageItem.Holder(STUB_ID) { class Holder : AbsMessageItem.Holder(STUB_ID) {
val mapViewContainer by bind<ConstraintLayout>(R.id.mapViewContainer) val mapViewContainer by bind<ConstraintLayout>(R.id.mapViewContainer)
val mapView by bind<MapTilerMapView>(R.id.mapView) val mapView by bind<MapTilerMapView>(R.id.mapView)
val clickableMapArea by bind<FrameLayout>(R.id.clickableMapArea)
} }
companion object { companion object {

View File

@ -14,4 +14,13 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/clickableMapArea"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/mapView"
app:layout_constraintEnd_toEndOf="@id/mapView"
app:layout_constraintStart_toStartOf="@id/mapView"
app:layout_constraintTop_toTopOf="@id/mapView" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>