Handling press on pinned location option
This commit is contained in:
parent
a1d155df71
commit
dec075faf3
|
@ -19,5 +19,6 @@ package im.vector.app.features.location
|
||||||
import im.vector.app.core.platform.VectorViewModelAction
|
import im.vector.app.core.platform.VectorViewModelAction
|
||||||
|
|
||||||
sealed class LocationSharingAction : VectorViewModelAction {
|
sealed class LocationSharingAction : VectorViewModelAction {
|
||||||
object OnShareLocation : LocationSharingAction()
|
object CurrentUserLocationSharingAction : LocationSharingAction()
|
||||||
|
data class PinnedLocationSharingAction(val locationData: LocationData?) : LocationSharingAction()
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,7 @@ class LocationSharingFragment @Inject constructor(
|
||||||
override fun invalidate() = withState(viewModel) { state ->
|
override fun invalidate() = withState(viewModel) { state ->
|
||||||
updateMap(state)
|
updateMap(state)
|
||||||
updateUserAvatar(state.userItem)
|
updateUserAvatar(state.userItem)
|
||||||
if(!hasUpdatedPin && state.pinDrawable != null) {
|
if (!hasUpdatedPin && state.pinDrawable != null) {
|
||||||
hasUpdatedPin = true
|
hasUpdatedPin = true
|
||||||
updateStaticPin(state.pinDrawable)
|
updateStaticPin(state.pinDrawable)
|
||||||
}
|
}
|
||||||
|
@ -147,10 +147,11 @@ class LocationSharingFragment @Inject constructor(
|
||||||
// set no option at start
|
// set no option at start
|
||||||
views.shareLocationOptionsPicker.render()
|
views.shareLocationOptionsPicker.render()
|
||||||
views.shareLocationOptionsPicker.optionPinned.debouncedClicks {
|
views.shareLocationOptionsPicker.optionPinned.debouncedClicks {
|
||||||
// TODO
|
val selectedLocation = views.mapView.getLocationOfMapCenter()
|
||||||
|
viewModel.handle(LocationSharingAction.PinnedLocationSharingAction(selectedLocation))
|
||||||
}
|
}
|
||||||
views.shareLocationOptionsPicker.optionUserCurrent.debouncedClicks {
|
views.shareLocationOptionsPicker.optionUserCurrent.debouncedClicks {
|
||||||
viewModel.handle(LocationSharingAction.OnShareLocation)
|
viewModel.handle(LocationSharingAction.CurrentUserLocationSharingAction)
|
||||||
}
|
}
|
||||||
views.shareLocationOptionsPicker.optionUserLive.debouncedClicks {
|
views.shareLocationOptionsPicker.optionUserLive.debouncedClicks {
|
||||||
// TODO
|
// TODO
|
||||||
|
|
|
@ -71,12 +71,22 @@ class LocationSharingViewModel @AssistedInject constructor(
|
||||||
|
|
||||||
override fun handle(action: LocationSharingAction) {
|
override fun handle(action: LocationSharingAction) {
|
||||||
when (action) {
|
when (action) {
|
||||||
LocationSharingAction.OnShareLocation -> handleShareLocation()
|
LocationSharingAction.CurrentUserLocationSharingAction -> handleCurrentUserLocationSharingAction()
|
||||||
|
is LocationSharingAction.PinnedLocationSharingAction -> handlePinnedLocationSharingAction(action)
|
||||||
}.exhaustive
|
}.exhaustive
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleShareLocation() = withState { state ->
|
private fun handleCurrentUserLocationSharingAction() = withState { state ->
|
||||||
state.lastKnownUserLocation?.let { location ->
|
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(
|
room.sendLocation(
|
||||||
latitude = location.latitude,
|
latitude = location.latitude,
|
||||||
longitude = location.longitude,
|
longitude = location.longitude,
|
||||||
|
|
Loading…
Reference in New Issue