Location centring user's sharing location (#7398)

* fix issue on timeline bubbles not showing proper content after decrypt

* fix location sharing centring to other users

* Update RiotSwiftUI/Modules/LocationSharing/LiveLocationSharingViewer/LiveLocationSharingViewerViewModel.swift

Co-authored-by: Alfonso Grillo <alfogrillo@element.io>

---------

Co-authored-by: Alfonso Grillo <alfogrillo@element.io>
This commit is contained in:
Flescio
2023-03-02 11:28:00 +01:00
committed by GitHub
parent 11ce4a2ca6
commit c7d6dd25a2
13 changed files with 53 additions and 22 deletions
@@ -18,6 +18,15 @@ import Combine
import Mapbox
import SwiftUI
/*
Behavior mode of the current user's location, can be hidden, only shown and shown following the user
*/
enum ShowUserLocationMode {
case follow
case show
case hide
}
struct LocationSharingMapView: UIViewRepresentable {
// MARK: - Constants
@@ -39,8 +48,8 @@ struct LocationSharingMapView: UIViewRepresentable {
/// Current user avatar data, used to replace current location annotation view with the user avatar
let userAvatarData: AvatarInputProtocol?
/// True to indicate to show and follow current user location
var showsUserLocation = false
/// Behavior mode of the current user's location, can be hidden, only shown and shown following the user
var showsUserLocationMode: ShowUserLocationMode = .hide
/// True to indicate that a touch on user annotation can show a callout
var userAnnotationCanShowCallout = false
@@ -75,14 +84,23 @@ struct LocationSharingMapView: UIViewRepresentable {
mapView.vc_removeAllAnnotations()
mapView.addAnnotations(annotations)
if let highlightedAnnotation = highlightedAnnotation, !showsUserLocation {
mapView.setCenter(highlightedAnnotation.coordinate, zoomLevel: Constants.mapZoomLevel, animated: false)
/*
if there is an highlighted annotation,
and the current user's location it's either hidden or only shown,
we can center to the highlighted annotation
*/
if let highlightedAnnotation = highlightedAnnotation, showsUserLocationMode != .follow {
mapView.setCenter(highlightedAnnotation.coordinate, zoomLevel: Constants.mapZoomLevel, animated: true)
}
if showsUserLocation {
switch showsUserLocationMode {
case .follow:
mapView.showsUserLocation = true
mapView.userTrackingMode = .follow
} else {
case .show:
mapView.showsUserLocation = true
mapView.userTrackingMode = .none
case .hide:
mapView.showsUserLocation = false
mapView.userTrackingMode = .none
}