Skip to content

Commit

Permalink
fix empty profile in feedback events
Browse files Browse the repository at this point in the history
  • Loading branch information
Zayankovsky committed Dec 10, 2021
1 parent 4c14629 commit e182041
Show file tree
Hide file tree
Showing 9 changed files with 210 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import com.mapbox.navigation.core.telemetry.events.FeedbackMetadataWrapper
import com.mapbox.navigation.core.telemetry.events.FreeDriveEventType
import com.mapbox.navigation.core.telemetry.events.FreeDriveEventType.START
import com.mapbox.navigation.core.telemetry.events.FreeDriveEventType.STOP
import com.mapbox.navigation.core.telemetry.events.MetricsDirectionsRoute
import com.mapbox.navigation.core.telemetry.events.MetricsRouteProgress
import com.mapbox.navigation.core.telemetry.events.NavigationArriveEvent
import com.mapbox.navigation.core.telemetry.events.NavigationCancelEvent
Expand Down Expand Up @@ -425,7 +426,8 @@ internal object MapboxNavigationTelemetry {
lifecycleMonitor?.obtainForegroundPercentage(),
EVENT_VERSION,
PhoneState.newInstance(applicationContext),
NavigationStepData(MetricsRouteProgress(routeData.routeProgress)),
MetricsDirectionsRoute(routeData.originalRoute),
MetricsRouteProgress(routeData.routeProgress),
createAppMetadata(),
locationsCollector
)
Expand Down Expand Up @@ -495,7 +497,7 @@ internal object MapboxNavigationTelemetry {
log("post user feedback with feedback metadata")
val feedbackEvent = NavigationFeedbackEvent(
feedbackMetadata.phoneState,
feedbackMetadata.navigationStepData,
NavigationStepData(feedbackMetadata.metricsRouteProgress),
).apply {
this.feedbackType = feedbackType
this.source = feedbackSource
Expand All @@ -508,8 +510,8 @@ internal object MapboxNavigationTelemetry {
getSessionMetadataIfTelemetryRunning()?.dynamicValues.retrieveDistanceTraveled()
populate(
this@MapboxNavigationTelemetry.sdkIdentifier,
null,
null,
feedbackMetadata.metricsDirectionsRoute,
feedbackMetadata.metricsRouteProgress,
feedbackMetadata.lastLocation,
feedbackMetadata.locationEngineNameExternal,
feedbackMetadata.percentTimeInPortrait,
Expand Down Expand Up @@ -757,8 +759,8 @@ internal object MapboxNavigationTelemetry {
val distanceTraveled = sessionMetadata?.dynamicValues.retrieveDistanceTraveled()
this.populate(
this@MapboxNavigationTelemetry.sdkIdentifier,
routeData.originalRoute,
routeData.routeProgress,
MetricsDirectionsRoute(routeData.originalRoute),
MetricsRouteProgress(routeData.routeProgress),
locationsCollector.lastLocation?.toPoint(),
locationEngineNameExternal,
lifecycleMonitor?.obtainPortraitPercentage(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package com.mapbox.navigation.core.telemetry

import com.mapbox.android.telemetry.TelemetryUtils
import com.mapbox.api.directions.v5.models.DirectionsRoute
import com.mapbox.base.common.logger.model.Message
import com.mapbox.base.common.logger.model.Tag
import com.mapbox.geojson.Point
import com.mapbox.navigation.base.trip.model.RouteProgress
import com.mapbox.navigation.core.telemetry.events.AppMetadata
import com.mapbox.navigation.core.telemetry.events.FeedbackEvent
import com.mapbox.navigation.core.telemetry.events.MetricsDirectionsRoute
import com.mapbox.navigation.core.telemetry.events.MetricsRouteProgress
import com.mapbox.navigation.core.telemetry.events.NavigationEvent
import com.mapbox.navigation.utils.internal.ifNonNull
import com.mapbox.navigation.utils.internal.logD

/**
Expand All @@ -34,8 +33,8 @@ import com.mapbox.navigation.utils.internal.logD
*/
internal fun NavigationEvent.populate(
sdkIdentifier: String,
originalRoute: DirectionsRoute?,
routeProgress: RouteProgress?,
originalRoute: MetricsDirectionsRoute,
routeProgress: MetricsRouteProgress,
lastLocation: Point?,
locationEngineNameExternal: String?,
percentTimeInPortrait: Int?,
Expand All @@ -53,38 +52,30 @@ internal fun NavigationEvent.populate(

this.sdkIdentifier = sdkIdentifier

ifNonNull(routeProgress) { routeProgressNonNull ->
stepIndex = routeProgressNonNull.currentLegProgress?.currentStepProgress?.stepIndex ?: 0
stepIndex = routeProgress.stepIndex

distanceRemaining = routeProgressNonNull.distanceRemaining.toInt()
durationRemaining = routeProgressNonNull.durationRemaining.toInt()
distanceCompleted = distanceTraveled
distanceRemaining = routeProgress.distanceRemaining
durationRemaining = routeProgress.durationRemaining
distanceCompleted = distanceTraveled

routeProgressNonNull.route.let {
geometry = it.geometry()
profile = it.routeOptions()?.profile()
requestIdentifier = it.requestUuid()
stepCount = obtainStepCount(it)
legIndex = it.routeIndex()?.toInt() ?: 0
legCount = it.legs()?.size ?: 0
geometry = routeProgress.directionsRouteGeometry
profile = routeProgress.directionsRouteProfile
requestIdentifier = routeProgress.directionsRouteRequestIdentifier
stepCount = routeProgress.directionsRouteStepCount
legIndex = routeProgress.directionsRouteIndex
legCount = routeProgress.legCount

absoluteDistanceToDestination = obtainAbsoluteDistance(
lastLocation,
obtainRouteDestination(it)
)
estimatedDistance = it.distance().toInt()
estimatedDuration = it.duration().toInt()
totalStepCount = obtainStepCount(it)
}
}
absoluteDistanceToDestination =
obtainAbsoluteDistance(lastLocation, routeProgress.directionsRouteDestination)
estimatedDistance = routeProgress.directionsRouteDistance
estimatedDuration = routeProgress.directionsRouteDuration
totalStepCount = routeProgress.directionsRouteStepCount

ifNonNull(originalRoute) { orininalRouteNonNull ->
originalStepCount = obtainStepCount(orininalRouteNonNull)
originalEstimatedDistance = orininalRouteNonNull.distance().toInt()
originalEstimatedDuration = orininalRouteNonNull.duration().toInt()
originalRequestIdentifier = orininalRouteNonNull.requestUuid()
originalGeometry = orininalRouteNonNull.geometry()
}
originalStepCount = originalRoute.stepCount
originalEstimatedDistance = originalRoute.distance
originalEstimatedDuration = originalRoute.duration
originalRequestIdentifier = originalRoute.requestIdentifier
originalGeometry = originalRoute.geometry

locationEngine = locationEngineNameExternal
tripIdentifier = navObtainUniversalTelemetryTripId()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ class FeedbackMetadataWrapper internal constructor(
private val percentTimeInForeground: Int?,
private val eventVersion: Int,
private val phoneState: PhoneState,
private val navigationStepData: NavigationStepData,
private val metricsDirectionsRoute: MetricsDirectionsRoute,
private val metricsRouteProgress: MetricsRouteProgress,
private val appMetadata: AppMetadata?,
private val locationsCollector: LocationsCollector,
) {
Expand Down Expand Up @@ -73,7 +74,8 @@ class FeedbackMetadataWrapper internal constructor(
percentTimeInForeground,
eventVersion,
phoneState,
navigationStepData,
metricsDirectionsRoute,
metricsRouteProgress,
appMetadata,
)
}
Expand Down Expand Up @@ -102,7 +104,8 @@ class FeedbackMetadata internal constructor(
internal val percentTimeInForeground: Int? = null,
internal val eventVersion: Int,
internal val phoneState: PhoneState,
internal val navigationStepData: NavigationStepData,
internal val metricsDirectionsRoute: MetricsDirectionsRoute,
internal val metricsRouteProgress: MetricsRouteProgress,
internal val appMetadata: AppMetadata? = null,
) {

Expand Down Expand Up @@ -144,7 +147,8 @@ class FeedbackMetadata internal constructor(
if (percentTimeInForeground != other.percentTimeInForeground) return false
if (eventVersion != other.eventVersion) return false
if (phoneState != other.phoneState) return false
if (navigationStepData != other.navigationStepData) return false
if (metricsDirectionsRoute != other.metricsDirectionsRoute) return false
if (metricsRouteProgress != other.metricsRouteProgress) return false
if (appMetadata != other.appMetadata) return false

return true
Expand All @@ -167,7 +171,8 @@ class FeedbackMetadata internal constructor(
result = 31 * result + percentTimeInForeground.hashCode()
result = 31 * result + eventVersion.hashCode()
result = 31 * result + phoneState.hashCode()
result = 31 * result + navigationStepData.hashCode()
result = 31 * result + metricsDirectionsRoute.hashCode()
result = 31 * result + metricsRouteProgress.hashCode()
result = 31 * result + appMetadata.hashCode()
return result
}
Expand All @@ -190,7 +195,8 @@ class FeedbackMetadata internal constructor(
"percentTimeInForeground=$percentTimeInForeground, " +
"eventVersion=$eventVersion, " +
"phoneState=$phoneState, " +
"navigationStepData=$navigationStepData, " +
"metricsDirectionsRoute=$metricsDirectionsRoute, " +
"metricsRouteProgress=$metricsRouteProgress, " +
"appMetadata=$appMetadata" +
")"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.mapbox.navigation.core.telemetry.events

import com.mapbox.api.directions.v5.models.DirectionsRoute
import com.mapbox.navigation.core.telemetry.obtainStepCount

internal data class MetricsDirectionsRoute(
val stepCount: Int,
val distance: Int,
val duration: Int,
val requestIdentifier: String?,
val geometry: String?,
) {

constructor(directionsRoute: DirectionsRoute?) : this(
obtainStepCount(directionsRoute),
distance = directionsRoute?.distance()?.toInt() ?: 0,
duration = directionsRoute?.duration()?.toInt() ?: 0,
directionsRoute?.requestUuid(),
directionsRoute?.geometry(),
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,30 @@ import com.mapbox.api.directions.v5.models.DirectionsRoute
import com.mapbox.geojson.Point
import com.mapbox.navigation.base.trip.model.RouteLegProgress
import com.mapbox.navigation.base.trip.model.RouteProgress
import com.mapbox.navigation.core.telemetry.obtainRouteDestination
import com.mapbox.navigation.core.telemetry.obtainStepCount
import com.mapbox.navigation.utils.internal.ifNonNull

internal class MetricsRouteProgress(routeProgress: RouteProgress?) {

private companion object {
private const val DEFAULT_PROFILE = "driving"
private val DEFAULT_POINT = Point.fromLngLat(0.0, 0.0)
}

var directionsRouteGeometry: String? = null
private set
var directionsRouteRequestIdentifier: String? = null
private set
var directionsRouteStepCount: Int = 0
private set
var directionsRouteIndex: Int = 0
private set
var directionsRouteDistance: Int = 0
private set
var directionsRouteDuration: Int = 0
private set
var directionsRouteProfile: String = ""
var directionsRouteProfile: String = DEFAULT_PROFILE
private set
var directionsRouteDestination: Point = DEFAULT_POINT
private set
Expand Down Expand Up @@ -87,7 +98,7 @@ internal class MetricsRouteProgress(routeProgress: RouteProgress?) {
}

private fun initDefaultValues() {
directionsRouteProfile = ""
directionsRouteProfile = DEFAULT_PROFILE
directionsRouteDestination = DEFAULT_POINT
currentStepName = ""
upcomingStepInstruction = ""
Expand All @@ -101,10 +112,14 @@ internal class MetricsRouteProgress(routeProgress: RouteProgress?) {
}

private fun obtainRouteData(route: DirectionsRoute) {
directionsRouteGeometry = route.geometry()
directionsRouteRequestIdentifier = route.requestUuid()
directionsRouteStepCount = obtainStepCount(route)
directionsRouteIndex = route.routeIndex()?.toInt() ?: 0
directionsRouteDistance = route.distance().toInt()
directionsRouteDuration = route.duration().toInt()
directionsRouteProfile = route.routeOptions()?.profile() ?: ""
directionsRouteDestination = retrieveRouteDestination(route)
directionsRouteProfile = route.routeOptions()?.profile() ?: DEFAULT_PROFILE
directionsRouteDestination = obtainRouteDestination(route)
}

private fun obtainLegData(legProgress: RouteLegProgress) {
Expand Down Expand Up @@ -135,7 +150,94 @@ internal class MetricsRouteProgress(routeProgress: RouteProgress?) {
previousStepName = currentStepName
}

private fun retrieveRouteDestination(route: DirectionsRoute): Point =
route.legs()?.lastOrNull()?.steps()?.lastOrNull()?.maneuver()?.location()
?: DEFAULT_POINT
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as MetricsRouteProgress

if (directionsRouteDistance != other.directionsRouteDistance) return false
if (directionsRouteDuration != other.directionsRouteDuration) return false
if (directionsRouteProfile != other.directionsRouteProfile) return false
if (directionsRouteDestination != other.directionsRouteDestination) return false
if (distanceRemaining != other.distanceRemaining) return false
if (durationRemaining != other.durationRemaining) return false
if (distanceTraveled != other.distanceTraveled) return false
if (currentStepDistance != other.currentStepDistance) return false
if (currentStepDuration != other.currentStepDuration) return false
if (currentStepDistanceRemaining != other.currentStepDistanceRemaining) return false
if (currentStepDurationRemaining != other.currentStepDurationRemaining) return false
if (currentStepName != other.currentStepName) return false
if (upcomingStepInstruction != other.upcomingStepInstruction) return false
if (upcomingStepModifier != other.upcomingStepModifier) return false
if (upcomingStepType != other.upcomingStepType) return false
if (upcomingStepName != other.upcomingStepName) return false
if (previousStepInstruction != other.previousStepInstruction) return false
if (previousStepModifier != other.previousStepModifier) return false
if (previousStepType != other.previousStepType) return false
if (previousStepName != other.previousStepName) return false
if (legIndex != other.legIndex) return false
if (legCount != other.legCount) return false
if (stepIndex != other.stepIndex) return false
if (stepCount != other.stepCount) return false

return true
}

override fun hashCode(): Int {
var result = directionsRouteDistance
result = 31 * result + directionsRouteDuration
result = 31 * result + directionsRouteProfile.hashCode()
result = 31 * result + directionsRouteDestination.hashCode()
result = 31 * result + distanceRemaining
result = 31 * result + durationRemaining
result = 31 * result + distanceTraveled
result = 31 * result + currentStepDistance
result = 31 * result + currentStepDuration
result = 31 * result + currentStepDistanceRemaining
result = 31 * result + currentStepDurationRemaining
result = 31 * result + currentStepName.hashCode()
result = 31 * result + upcomingStepInstruction.hashCode()
result = 31 * result + upcomingStepModifier.hashCode()
result = 31 * result + upcomingStepType.hashCode()
result = 31 * result + upcomingStepName.hashCode()
result = 31 * result + previousStepInstruction.hashCode()
result = 31 * result + previousStepModifier.hashCode()
result = 31 * result + previousStepType.hashCode()
result = 31 * result + previousStepName.hashCode()
result = 31 * result + legIndex
result = 31 * result + legCount
result = 31 * result + stepIndex
result = 31 * result + stepCount
return result
}

override fun toString(): String {
return "MetricsRouteProgress(" +
"directionsRouteDistance=$directionsRouteDistance, " +
"directionsRouteDuration=$directionsRouteDuration, " +
"directionsRouteProfile='$directionsRouteProfile', " +
"directionsRouteDestination=$directionsRouteDestination, " +
"distanceRemaining=$distanceRemaining, " +
"durationRemaining=$durationRemaining, " +
"distanceTraveled=$distanceTraveled, " +
"currentStepDistance=$currentStepDistance, " +
"currentStepDuration=$currentStepDuration, " +
"currentStepDistanceRemaining=$currentStepDistanceRemaining, " +
"currentStepDurationRemaining=$currentStepDurationRemaining, " +
"currentStepName='$currentStepName', " +
"upcomingStepInstruction=$upcomingStepInstruction, " +
"upcomingStepModifier=$upcomingStepModifier, " +
"upcomingStepType=$upcomingStepType, " +
"upcomingStepName=$upcomingStepName, " +
"previousStepInstruction=$previousStepInstruction, " +
"previousStepModifier=$previousStepModifier, " +
"previousStepType=$previousStepType, " +
"previousStepName='$previousStepName', " +
"legIndex=$legIndex, " +
"legCount=$legCount, " +
"stepIndex=$stepIndex, " +
"stepCount=$stepCount" +
")"
}
}

0 comments on commit e182041

Please sign in to comment.