[go: nahoru, domu]

blob: 38550bce128ecda813ba0bf82729280c8a3fa778 [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.health.services.client.data
import androidx.health.services.client.proto.DataProto
import androidx.health.services.client.proto.DataProto.ExerciseLapSummary.LapMetricsEntry
import java.time.Duration
import java.time.Instant
/** Describes a completed exercise lap. */
@Suppress("ParcelCreator")
class ExerciseLapSummary(
/** Returns the lap count of this summary. Lap count starts at 1 for the first lap. */
val lapCount: Int,
/** Returns the time at which the lap has started. */
val startTime: Instant,
/** Returns the time at which the lap has ended. */
val endTime: Instant,
/**
* Returns the total elapsed time for which the exercise has been active during this lap, i.e.
* started but not paused.
*/
val activeDuration: Duration,
/**
* Returns the [DataPoint]s for each metric keyed by [DataType] tracked between [startTime] and
* [endTime] i.e. during the duration of this lap. This will only contain [AggregateDataType]s
* calculated over the duration of the lap.
*/
val lapMetrics: DataPointContainer,
) {
internal constructor(
proto: DataProto.ExerciseLapSummary
) : this(
proto.lapCount,
Instant.ofEpochMilli(proto.startTimeEpochMs),
Instant.ofEpochMilli(proto.endTimeEpochMs),
Duration.ofMillis(proto.activeDurationMs),
DataPointContainer(
proto.lapMetricsList.map { DataPoint.fromProto(it.aggregateDataPoint) }
)
)
internal val proto: DataProto.ExerciseLapSummary =
DataProto.ExerciseLapSummary.newBuilder()
.setLapCount(lapCount)
.setStartTimeEpochMs(startTime.toEpochMilli())
.setEndTimeEpochMs(endTime.toEpochMilli())
.setActiveDurationMs(activeDuration.toMillis())
.addAllLapMetrics(
lapMetrics.statisticalDataPoints
.map {
LapMetricsEntry.newBuilder()
.setDataType(it.dataType.proto)
.setAggregateDataPoint(it.proto)
.build()
}
.sortedBy { it.dataType.name } // Required to ensure equals() works
)
.addAllLapMetrics(
lapMetrics.cumulativeDataPoints
.map {
LapMetricsEntry.newBuilder()
.setDataType(it.dataType.proto)
.setAggregateDataPoint(it.proto)
.build()
}
.sortedBy { it.dataType.name } // Required to ensure equals() works
)
.build()
override fun toString(): String =
"ExerciseLapSummary(" +
"lapCount=$lapCount, " +
"startTime=$startTime, " +
"endTime=$endTime, " +
"activeDuration=$activeDuration, " +
"lapMetrics=$lapMetrics)"
}