Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 26 additions & 11 deletions app/src/main/java/org/nitri/opentopo/GpxDetailFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.LineData
import com.github.mikephil.charting.data.LineDataSet
import com.github.mikephil.charting.formatter.IAxisValueFormatter
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet
import io.ticofab.androidgpxparser.parser.domain.Gpx
import io.ticofab.androidgpxparser.parser.domain.Track
import io.ticofab.androidgpxparser.parser.domain.TrackPoint
Expand Down Expand Up @@ -157,6 +158,10 @@ class GpxDetailFragment : Fragment(), WayPointListAdapter.OnItemClickListener,
maxElevation = Double.MIN_VALUE

track.trackSegments?.forEach { segment ->
if (trackDistancePoints.isNotEmpty()) {
trackDistancePoints.add(DistancePoint.Builder().build())
}
prevTrackPoint = null
segment.trackPoints?.forEach { trackPoint ->
prevTrackPoint?.let { prevPoint ->
totalDistance += DistanceCalculator.distance(prevPoint, trackPoint)
Expand Down Expand Up @@ -256,25 +261,35 @@ class GpxDetailFragment : Fragment(), WayPointListAdapter.OnItemClickListener,
}

private fun setChartData() {
val elevationValues = ArrayList<Entry>()
val elevationDataSets = ArrayList<ILineDataSet>()
var elevationValues = ArrayList<Entry>()
for (point in trackDistancePoints) {
if (point.distance != null && point.elevation != null) elevationValues.add(
Entry(
point.distance.toFloat(),
point.elevation.toFloat()
)
)
val distance = point.distance
val elevation = point.elevation
if (distance != null && elevation != null) {
elevationValues.add(Entry(distance.toFloat(), elevation.toFloat()))
} else if (elevationValues.isNotEmpty()) {
elevationDataSets.add(createElevationDataSet(elevationValues))
elevationValues = ArrayList()
}
}
if (elevationValues.isNotEmpty()) {
elevationDataSets.add(createElevationDataSet(elevationValues))
}
val elevationDataSet = LineDataSet(elevationValues, getString(R.string.elevation))
val elevationData = LineData(elevationDataSets)
elevationChart.data = elevationData
elevationChart.invalidate()
}

private fun createElevationDataSet(entries: List<Entry>): LineDataSet {
val elevationDataSet = LineDataSet(entries, getString(R.string.elevation))
elevationDataSet.setDrawValues(false)
elevationDataSet.lineWidth = 2f
elevationDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
elevationDataSet.color = ResourcesCompat.getColor(resources, R.color.colorPrimary, null)
elevationDataSet.setDrawCircles(false)
elevationDataSet.axisDependency = YAxis.AxisDependency.LEFT
val elevationData = LineData(elevationDataSet)
elevationChart.data = elevationData
elevationChart.invalidate()
return elevationDataSet
}

override fun onItemClick(index: Int) {
Expand Down