diff --git a/vector/src/main/java/im/vector/app/features/location/LocationSharingAction.kt b/vector/src/main/java/im/vector/app/features/location/LocationSharingAction.kt index 01319ef6c7..a5adf4d2af 100644 --- a/vector/src/main/java/im/vector/app/features/location/LocationSharingAction.kt +++ b/vector/src/main/java/im/vector/app/features/location/LocationSharingAction.kt @@ -19,5 +19,6 @@ package im.vector.app.features.location import im.vector.app.core.platform.VectorViewModelAction sealed class LocationSharingAction : VectorViewModelAction { - object OnShareLocation : LocationSharingAction() + object CurrentUserLocationSharingAction : LocationSharingAction() + data class PinnedLocationSharingAction(val locationData: LocationData?) : LocationSharingAction() } diff --git a/vector/src/main/java/im/vector/app/features/location/LocationSharingFragment.kt b/vector/src/main/java/im/vector/app/features/location/LocationSharingFragment.kt index 6d2f70b075..57550d930d 100644 --- a/vector/src/main/java/im/vector/app/features/location/LocationSharingFragment.kt +++ b/vector/src/main/java/im/vector/app/features/location/LocationSharingFragment.kt @@ -118,7 +118,7 @@ class LocationSharingFragment @Inject constructor( override fun invalidate() = withState(viewModel) { state -> updateMap(state) updateUserAvatar(state.userItem) - if(!hasUpdatedPin && state.pinDrawable != null) { + if (!hasUpdatedPin && state.pinDrawable != null) { hasUpdatedPin = true updateStaticPin(state.pinDrawable) } @@ -147,10 +147,11 @@ class LocationSharingFragment @Inject constructor( // set no option at start views.shareLocationOptionsPicker.render() views.shareLocationOptionsPicker.optionPinned.debouncedClicks { - // TODO + val selectedLocation = views.mapView.getLocationOfMapCenter() + viewModel.handle(LocationSharingAction.PinnedLocationSharingAction(selectedLocation)) } views.shareLocationOptionsPicker.optionUserCurrent.debouncedClicks { - viewModel.handle(LocationSharingAction.OnShareLocation) + viewModel.handle(LocationSharingAction.CurrentUserLocationSharingAction) } views.shareLocationOptionsPicker.optionUserLive.debouncedClicks { // TODO diff --git a/vector/src/main/java/im/vector/app/features/location/LocationSharingViewModel.kt b/vector/src/main/java/im/vector/app/features/location/LocationSharingViewModel.kt index 07ad77b277..5dd826708d 100644 --- a/vector/src/main/java/im/vector/app/features/location/LocationSharingViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/location/LocationSharingViewModel.kt @@ -71,12 +71,22 @@ class LocationSharingViewModel @AssistedInject constructor( override fun handle(action: LocationSharingAction) { when (action) { - LocationSharingAction.OnShareLocation -> handleShareLocation() + LocationSharingAction.CurrentUserLocationSharingAction -> handleCurrentUserLocationSharingAction() + is LocationSharingAction.PinnedLocationSharingAction -> handlePinnedLocationSharingAction(action) }.exhaustive } - private fun handleShareLocation() = withState { state -> - state.lastKnownUserLocation?.let { location -> + private fun handleCurrentUserLocationSharingAction() = withState { state -> + shareLocation(state.lastKnownUserLocation) + } + + private fun handlePinnedLocationSharingAction(action: LocationSharingAction.PinnedLocationSharingAction) { + // TODO check if we can use the same api than for user location? + shareLocation(action.locationData) + } + + private fun shareLocation(locationData: LocationData?) { + locationData?.let { location -> room.sendLocation( latitude = location.latitude, longitude = location.longitude,