diff --git a/app/src/main/java/com/canopas/yourspace/ui/flow/journey/components/LocationHistory.kt b/app/src/main/java/com/canopas/yourspace/ui/flow/journey/components/LocationHistory.kt index 842f820f..b4f50f97 100644 --- a/app/src/main/java/com/canopas/yourspace/ui/flow/journey/components/LocationHistory.kt +++ b/app/src/main/java/com/canopas/yourspace/ui/flow/journey/components/LocationHistory.kt @@ -44,8 +44,6 @@ import androidx.compose.ui.unit.dp import com.canopas.yourspace.R import com.canopas.yourspace.data.models.location.LocationJourney import com.canopas.yourspace.data.models.location.isSteadyLocation -import com.canopas.yourspace.data.models.location.toLocationFromMovingJourney -import com.canopas.yourspace.data.models.location.toLocationFromSteadyJourney import com.canopas.yourspace.domain.utils.getAddress import com.canopas.yourspace.domain.utils.getPlaceAddress import com.canopas.yourspace.domain.utils.isToday @@ -104,7 +102,7 @@ fun JourneyLocationItem(location: LocationJourney, lastItem: Boolean, onTap: () .weight(1f) ) { val time = getFormattedJourneyTime(location.created_at ?: 0, location.update_at ?: 0) - val distance = getDistanceString(location) + val distance = getDistanceString(location.route_distance ?: 0.0) PlaceInfo(title, "$time - $distance") Spacer(modifier = Modifier.size(16.dp)) @@ -316,16 +314,13 @@ internal fun getFormattedJourneyTime(startAt: Long, endsAt: Long): String { } internal fun getDistanceString( - location: LocationJourney + routeDistance: Double ): String { - return location.toLocationFromSteadyJourney().distanceTo(location.toLocationFromMovingJourney()).let { - val routeDistance = it - if (routeDistance < 1000) { - "${routeDistance.roundToInt()} m" - } else { - val distanceInKm = (routeDistance / 1000) - "${distanceInKm.roundToInt()} km" - } + return if (routeDistance < 1000) { + "${routeDistance.roundToInt()} m" + } else { + val distanceInKm = (routeDistance / 1000) + "${distanceInKm.roundToInt()} km" } } diff --git a/app/src/main/java/com/canopas/yourspace/ui/flow/journey/detail/UserJourneyDetailScreen.kt b/app/src/main/java/com/canopas/yourspace/ui/flow/journey/detail/UserJourneyDetailScreen.kt index b30b89fb..43e52165 100644 --- a/app/src/main/java/com/canopas/yourspace/ui/flow/journey/detail/UserJourneyDetailScreen.kt +++ b/app/src/main/java/com/canopas/yourspace/ui/flow/journey/detail/UserJourneyDetailScreen.kt @@ -130,8 +130,8 @@ private fun JourneyInfo(journey: LocationJourney) { } } - val distance = getDistanceString(location = journey) - val duration = getRouteDurationString(journey) + val distance = getDistanceString(journey.route_distance ?: 0.0) + val duration = getRouteDurationString(journey.route_duration ?: 0) Text( text = "$distance - $duration", @@ -275,9 +275,8 @@ private fun JourneyMarker(bgColor: Color, content: @Composable BoxScope.() -> Un } internal fun getRouteDurationString( - journey: LocationJourney + routeDuration: Long ): String { - val routeDuration = journey.update_at!! - journey.created_at!! val hours = TimeUnit.MILLISECONDS.toHours(routeDuration) val minutes = TimeUnit.MILLISECONDS.toMinutes(routeDuration) % 60 val seconds = TimeUnit.MILLISECONDS.toSeconds(routeDuration) % 60 diff --git a/data/src/main/java/com/canopas/yourspace/data/models/location/LocationJourney.kt b/data/src/main/java/com/canopas/yourspace/data/models/location/LocationJourney.kt index ac9bb887..d01a572c 100644 --- a/data/src/main/java/com/canopas/yourspace/data/models/location/LocationJourney.kt +++ b/data/src/main/java/com/canopas/yourspace/data/models/location/LocationJourney.kt @@ -15,6 +15,8 @@ data class LocationJourney( val from_longitude: Double = 0.0, var to_latitude: Double? = null, var to_longitude: Double? = null, + val route_distance: Double? = null, + val route_duration: Long? = null, val routes: List = emptyList(), val created_at: Long? = System.currentTimeMillis(), val update_at: Long? = System.currentTimeMillis() diff --git a/data/src/main/java/com/canopas/yourspace/data/repository/JourneyRepository.kt b/data/src/main/java/com/canopas/yourspace/data/repository/JourneyRepository.kt index f4bd708a..774704e0 100644 --- a/data/src/main/java/com/canopas/yourspace/data/repository/JourneyRepository.kt +++ b/data/src/main/java/com/canopas/yourspace/data/repository/JourneyRepository.kt @@ -156,7 +156,8 @@ class JourneyRepository @Inject constructor( ) } - val timeDifference = (geometricMedian?.time ?: extractedLocation.time) - lastKnownJourney.update_at!! + val timeDifference = + (geometricMedian?.time ?: extractedLocation.time) - lastKnownJourney.update_at!! if (lastKnownJourney.isSteadyLocation()) { // Handle steady user @@ -166,7 +167,8 @@ class JourneyRepository @Inject constructor( saveJourneyWhenUserStartsMoving( userId, extractedLocation, - lastKnownJourney + lastKnownJourney, + distance ) } } else { @@ -178,7 +180,8 @@ class JourneyRepository @Inject constructor( updateJourneyForContinuedMovingUser( userId, extractedLocation, - lastKnownJourney + lastKnownJourney, + distance ) } else if (distance < MIN_DISTANCE && timeDifference > MIN_TIME_DIFFERENCE) { // Here, means last known journey is moving and user has stopped moving @@ -186,7 +189,8 @@ class JourneyRepository @Inject constructor( saveJourneyOnJourneyStopped( userId, extractedLocation, - lastKnownJourney + lastKnownJourney, + distance ) } } @@ -198,7 +202,8 @@ class JourneyRepository @Inject constructor( private suspend fun saveJourneyWhenUserStartsMoving( userId: String, extractedLocation: Location, - lastKnownJourney: LocationJourney + lastKnownJourney: LocationJourney, + distance: Float ) { var newJourneyId = "" val journey = LocationJourney( @@ -207,6 +212,8 @@ class JourneyRepository @Inject constructor( from_longitude = lastKnownJourney.from_longitude, to_latitude = extractedLocation.latitude, to_longitude = extractedLocation.longitude, + route_distance = distance.toDouble(), + route_duration = null, routes = listOf( lastKnownJourney.toLocationFromSteadyJourney().toRoute(), extractedLocation.toRoute() @@ -217,7 +224,9 @@ class JourneyRepository @Inject constructor( fromLatitude = lastKnownJourney.from_latitude, fromLongitude = lastKnownJourney.from_longitude, toLatitude = extractedLocation.latitude, - toLongitude = extractedLocation.longitude + toLongitude = extractedLocation.longitude, + routeDistance = distance.toDouble(), + routeDuration = null ) { newJourneyId = it } @@ -230,7 +239,8 @@ class JourneyRepository @Inject constructor( private suspend fun updateJourneyForContinuedMovingUser( userId: String, extractedLocation: Location, - lastKnownJourney: LocationJourney + lastKnownJourney: LocationJourney, + distance: Float ) { val journey = LocationJourney( id = lastKnownJourney.id, @@ -239,6 +249,8 @@ class JourneyRepository @Inject constructor( from_longitude = lastKnownJourney.from_longitude, to_latitude = extractedLocation.latitude, to_longitude = extractedLocation.longitude, + route_distance = distance.toDouble() + (lastKnownJourney.route_distance ?: 0.0), + route_duration = (lastKnownJourney.update_at!! - lastKnownJourney.created_at!!), routes = lastKnownJourney.routes + listOf(extractedLocation.toRoute()), created_at = lastKnownJourney.created_at ) @@ -255,7 +267,8 @@ class JourneyRepository @Inject constructor( private suspend fun saveJourneyOnJourneyStopped( userId: String, extractedLocation: Location, - lastKnownJourney: LocationJourney + lastKnownJourney: LocationJourney, + distance: Float ) { val movingJourney = LocationJourney( id = lastKnownJourney.id, @@ -264,6 +277,8 @@ class JourneyRepository @Inject constructor( from_longitude = lastKnownJourney.from_longitude, to_latitude = extractedLocation.latitude, to_longitude = extractedLocation.longitude, + route_distance = distance.toDouble() + (lastKnownJourney.route_distance ?: 0.0), + route_duration = (lastKnownJourney.update_at!! - lastKnownJourney.created_at!!), routes = lastKnownJourney.routes + listOf(extractedLocation.toRoute()), created_at = lastKnownJourney.created_at, update_at = lastKnownJourney.update_at @@ -295,7 +310,7 @@ class JourneyRepository @Inject constructor( /** * Calculate distance between two locations * */ - fun distanceBetween(location1: Location, location2: Location): Float { + private fun distanceBetween(location1: Location, location2: Location): Float { val distance = FloatArray(1) Location.distanceBetween( location1.latitude, diff --git a/data/src/main/java/com/canopas/yourspace/data/service/location/ApiJourneyService.kt b/data/src/main/java/com/canopas/yourspace/data/service/location/ApiJourneyService.kt index 55172648..26f52206 100644 --- a/data/src/main/java/com/canopas/yourspace/data/service/location/ApiJourneyService.kt +++ b/data/src/main/java/com/canopas/yourspace/data/service/location/ApiJourneyService.kt @@ -31,6 +31,8 @@ class ApiJourneyService @Inject constructor( fromLongitude: Double, toLatitude: Double? = null, toLongitude: Double? = null, + routeDistance: Double? = null, + routeDuration: Long? = null, routes: List = emptyList(), createdAt: Long? = null, updateAt: Long? = null, @@ -45,6 +47,8 @@ class ApiJourneyService @Inject constructor( from_longitude = fromLongitude, to_latitude = toLatitude, to_longitude = toLongitude, + route_distance = routeDistance, + route_duration = routeDuration, routes = routes, created_at = createdAt ?: System.currentTimeMillis(), update_at = updateAt ?: System.currentTimeMillis()