diff --git a/app/src/main/java/com/canopas/catchme/ui/flow/home/map/MapScreen.kt b/app/src/main/java/com/canopas/catchme/ui/flow/home/map/MapScreen.kt index c69b6b60..7f58464e 100644 --- a/app/src/main/java/com/canopas/catchme/ui/flow/home/map/MapScreen.kt +++ b/app/src/main/java/com/canopas/catchme/ui/flow/home/map/MapScreen.kt @@ -148,26 +148,14 @@ fun MapScreenContent(modifier: Modifier) { } } - LaunchedEffect(userLocation, state.selectedUser) { - if (state.selectedUser != null) { - val location = state.selectedUser?.location - if (location != null) { - val latLng = LatLng(location.latitude, location.longitude) - cameraPositionState.animate( - CameraUpdateFactory.newLatLngZoom( - latLng, - DEFAULT_CAMERA_ZOOM_FOR_SELECTED_USER - ) - ) - } - } else { - cameraPositionState.animate( - CameraUpdateFactory.newLatLngZoom( - userLocation, - DEFAULT_CAMERA_ZOOM - ) + LaunchedEffect(userLocation) { + val location = state.selectedUser?.location + cameraPositionState.animate( + CameraUpdateFactory.newLatLngZoom( + userLocation, + if (location != null) DEFAULT_CAMERA_ZOOM_FOR_SELECTED_USER else DEFAULT_CAMERA_ZOOM ) - } + ) } Box(modifier = modifier.fillMaxSize()) { diff --git a/app/src/main/java/com/canopas/catchme/ui/flow/home/map/MapViewModel.kt b/app/src/main/java/com/canopas/catchme/ui/flow/home/map/MapViewModel.kt index e53dd52d..46aead10 100644 --- a/app/src/main/java/com/canopas/catchme/ui/flow/home/map/MapViewModel.kt +++ b/app/src/main/java/com/canopas/catchme/ui/flow/home/map/MapViewModel.kt @@ -3,6 +3,7 @@ package com.canopas.catchme.ui.flow.home.map import android.location.Location import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.canopas.catchme.data.models.location.toLocation import com.canopas.catchme.data.models.user.UserInfo import com.canopas.catchme.data.repository.SpaceRepository import com.canopas.catchme.data.service.location.LocationManager @@ -50,11 +51,9 @@ class MapViewModel @Inject constructor( private fun listenMemberLocation() { locationJob = viewModelScope.launch(appDispatcher.IO) { spaceRepository.getMemberWithLocation().collectLatest { - val currentLocation = locationManager.getLastLocation() _state.emit( _state.value.copy( - members = it, - defaultCameraPosition = currentLocation + members = it ) ) } @@ -66,7 +65,14 @@ class MapViewModel @Inject constructor( if (selectedUser != null && selectedUser.user.id == userInfo.user.id) { dismissMemberDetail() } else { - _state.emit(_state.value.copy(selectedUser = userInfo, showUserDetails = true)) + val selectedLocation = userInfo.location?.toLocation() + _state.emit( + _state.value.copy( + selectedUser = userInfo, + defaultCameraPosition = selectedLocation, + showUserDetails = true + ) + ) } } diff --git a/data/src/main/java/com/canopas/catchme/data/models/location/ApiLocation.kt b/data/src/main/java/com/canopas/catchme/data/models/location/ApiLocation.kt index d7e758f6..694d1dea 100644 --- a/data/src/main/java/com/canopas/catchme/data/models/location/ApiLocation.kt +++ b/data/src/main/java/com/canopas/catchme/data/models/location/ApiLocation.kt @@ -11,3 +11,8 @@ data class ApiLocation( val longitude: Double = 0.0, val created_at: Long? = System.currentTimeMillis() ) + +fun ApiLocation.toLocation() = android.location.Location("").apply { + latitude = this@toLocation.latitude + longitude = this@toLocation.longitude +}