diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt index 51aa51f070..4070532f80 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt @@ -73,7 +73,6 @@ import im.vector.app.features.html.PillsPostProcessor import im.vector.app.features.html.SpanUtils import im.vector.app.features.html.VectorHtmlCompressor 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.VideoContentRenderer import me.gujun.android.span.span @@ -192,11 +191,9 @@ class MessageItemFactory @Inject constructor( val locationData = LocationData.create(geoUri) val mapCallback: MessageLocationItem.Callback = object : MessageLocationItem.Callback { - override fun onMapReady(mapView: VectorMapView) { - mapView.onClick { - locationData?.let { - callback?.onTimelineItemAction(RoomDetailAction.ShowLocation(it, informationData.senderId)) - } + override fun onMapClicked() { + locationData?.let { + callback?.onTimelineItemAction(RoomDetailAction.ShowLocation(it, informationData.senderId)) } } } 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 cb37901245..d8ccf3761e 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,21 +16,22 @@ package im.vector.app.features.home.room.detail.timeline.item +import android.widget.FrameLayout import androidx.constraintlayout.widget.ConstraintLayout import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyModelClass 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.location.LocationData import im.vector.app.features.location.MapTilerMapView import im.vector.app.features.location.VectorMapListener -import im.vector.app.features.location.VectorMapView @EpoxyModelClass(layout = R.layout.item_timeline_event_base) abstract class MessageLocationItem : AbsMessageItem() { interface Callback { - fun onMapReady(mapView: VectorMapView) + fun onMapClicked() } @EpoxyAttribute @@ -52,6 +53,10 @@ abstract class MessageLocationItem : AbsMessageItem( val location = locationData ?: return val locationOwnerId = userId ?: return + holder.clickableMapArea.onClick { + callback?.onMapClicked() + } + holder.mapView.apply { initialize(object : VectorMapListener { override fun onMapReady() { @@ -61,8 +66,6 @@ abstract class MessageLocationItem : AbsMessageItem( addPinToMap(locationOwnerId, pinDrawable) updatePinLocation(locationOwnerId, location.latitude, location.longitude) } - - callback?.onMapReady(this@apply) } }) } @@ -73,6 +76,7 @@ abstract class MessageLocationItem : AbsMessageItem( class Holder : AbsMessageItem.Holder(STUB_ID) { val mapViewContainer by bind(R.id.mapViewContainer) val mapView by bind(R.id.mapView) + val clickableMapArea by bind(R.id.clickableMapArea) } companion object { 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 b126231ba1..0b211ec5e0 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 @@ -14,4 +14,13 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + +