Zoom to selected user from bottom sheet.
This commit is contained in:
parent
2eaf843031
commit
8018ba3213
@ -22,10 +22,15 @@ import com.mapbox.mapboxsdk.geometry.LatLng
|
||||
import com.mapbox.mapboxsdk.geometry.LatLngBounds
|
||||
import com.mapbox.mapboxsdk.maps.MapboxMap
|
||||
|
||||
fun MapboxMap?.zoomToLocation(locationData: LocationData) {
|
||||
fun MapboxMap?.zoomToLocation(locationData: LocationData, preserveCurrentZoomLevel: Boolean = false) {
|
||||
val zoomLevel = if (preserveCurrentZoomLevel && this?.cameraPosition != null) {
|
||||
cameraPosition.zoom
|
||||
} else {
|
||||
INITIAL_MAP_ZOOM_IN_PREVIEW
|
||||
}
|
||||
this?.cameraPosition = CameraPosition.Builder()
|
||||
.target(LatLng(locationData.latitude, locationData.longitude))
|
||||
.zoom(INITIAL_MAP_ZOOM_IN_PREVIEW)
|
||||
.zoom(zoomLevel)
|
||||
.build()
|
||||
}
|
||||
|
||||
|
@ -56,6 +56,10 @@ class LiveLocationBottomSheetController @Inject constructor(
|
||||
val host = this
|
||||
|
||||
val userItemCallback = object : LiveLocationUserItem.Callback {
|
||||
override fun onUserSelected(userId: String) {
|
||||
host.callback?.onUserSelected(userId)
|
||||
}
|
||||
|
||||
override fun onStopSharingClicked() {
|
||||
host.callback?.onStopLocationClicked()
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ import org.threeten.bp.Duration
|
||||
abstract class LiveLocationUserItem : VectorEpoxyModel<LiveLocationUserItem.Holder>() {
|
||||
|
||||
interface Callback {
|
||||
fun onUserSelected(userId: String)
|
||||
fun onStopSharingClicked()
|
||||
}
|
||||
|
||||
@ -79,7 +80,6 @@ abstract class LiveLocationUserItem : VectorEpoxyModel<LiveLocationUserItem.Hold
|
||||
}
|
||||
|
||||
stopTimer(holder)
|
||||
|
||||
holder.timer = CountUpTimer(1000).apply {
|
||||
tickListener = object : CountUpTimer.TickListener {
|
||||
override fun onTick(milliseconds: Long) {
|
||||
@ -88,6 +88,8 @@ abstract class LiveLocationUserItem : VectorEpoxyModel<LiveLocationUserItem.Hold
|
||||
}
|
||||
resume()
|
||||
}
|
||||
|
||||
holder.view.setOnClickListener { callback?.onUserSelected(matrixItem.id) }
|
||||
}
|
||||
|
||||
override fun unbind(holder: Holder) {
|
||||
|
@ -74,7 +74,7 @@ class LocationLiveMapViewFragment @Inject constructor(
|
||||
|
||||
bottomSheetController.callback = object : LiveLocationBottomSheetController.Callback {
|
||||
override fun onUserSelected(userId: String) {
|
||||
|
||||
handleBottomSheetUserSelected(userId)
|
||||
}
|
||||
|
||||
override fun onStopLocationClicked() {
|
||||
@ -212,6 +212,15 @@ class LocationLiveMapViewFragment @Inject constructor(
|
||||
.withIconImage(userLiveLocation.matrixItem.id)
|
||||
.withIconAnchor(Property.ICON_ANCHOR_BOTTOM)
|
||||
|
||||
private fun handleBottomSheetUserSelected(userId: String) = withState(viewModel) { state ->
|
||||
state.userLocations
|
||||
.find { it.matrixItem.id == userId }
|
||||
?.locationData
|
||||
?.let { locationData ->
|
||||
mapboxMap?.get()?.zoomToLocation(locationData, preserveCurrentZoomLevel = true)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val MAP_FRAGMENT_TAG = "im.vector.app.features.location.live.map"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user