[go: nahoru, domu]

blob: 6072b1d9f77e1efdfb3fef6aeadf0aa378fce8d3 [file] [log] [blame]
/*
* Copyright (C) 2022 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.annotation.IntDef
import androidx.annotation.RestrictTo
import androidx.health.services.client.ExerciseClient
import androidx.health.services.client.proto.DataProto
import kotlin.annotation.AnnotationRetention.SOURCE
/**
* The reason why an exercise has been ended for [ExerciseState] used in [ExerciseStateInfo].
*
*/
@Retention(SOURCE)
@IntDef(
ExerciseEndReason.UNKNOWN,
ExerciseEndReason.AUTO_END_PERMISSION_LOST,
ExerciseEndReason.AUTO_END_PAUSE_EXPIRED,
ExerciseEndReason.AUTO_END_MISSING_LISTENER,
ExerciseEndReason.USER_END,
ExerciseEndReason.AUTO_END_SUPERSEDED,
ExerciseEndReason.AUTO_END_PREPARE_EXPIRED
)
@RestrictTo(RestrictTo.Scope.LIBRARY)
public annotation class ExerciseEndReason {
public companion object {
/** The exercise has been ended, but the end reason is not known or has not been set. */
public const val UNKNOWN: Int = 0
/**
* The exercise has been automatically ended due to lack of client's permissions to receive
* data for the exercise.
*/
public const val AUTO_END_PERMISSION_LOST: Int = 1
/** The exercise has been automatically ended due to being paused for too long. */
public const val AUTO_END_PAUSE_EXPIRED: Int = 2
/**
* The exercise being automatically ended, due to a lack of exercise updates being received
* by the user.
*/
public const val AUTO_END_MISSING_LISTENER: Int = 3
/** The exercise has been ended by a direct call to [ExerciseClient.endExerciseAsync]. */
public const val USER_END: Int = 4
/**
* The exercise has been ended because it was superseded by a new exercise being started by
* another client.
*/
public const val AUTO_END_SUPERSEDED: Int = 5
/** The exercise has been ended due to being in PREPARE state for too long. */
public const val AUTO_END_PREPARE_EXPIRED: Int = 6
internal fun @receiver:ExerciseEndReason Int.toProto(): DataProto.ExerciseEndReason =
when (this) {
UNKNOWN -> DataProto.ExerciseEndReason.EXERCISE_END_REASON_UNKNOWN
AUTO_END_PERMISSION_LOST ->
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_PERMISSION_LOST
AUTO_END_PAUSE_EXPIRED ->
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_PAUSE_EXPIRED
AUTO_END_MISSING_LISTENER ->
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_MISSING_LISTENER
USER_END -> DataProto.ExerciseEndReason.EXERCISE_END_REASON_USER_END
AUTO_END_SUPERSEDED ->
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_SUPERSEDED
AUTO_END_PREPARE_EXPIRED ->
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_PREPARE_EXPIRED
else -> DataProto.ExerciseEndReason.EXERCISE_END_REASON_UNKNOWN
}
@ExerciseEndReason
internal fun fromProto(proto: DataProto.ExerciseEndReason): Int =
when (proto) {
DataProto.ExerciseEndReason.EXERCISE_END_REASON_UNKNOWN -> UNKNOWN
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_PERMISSION_LOST ->
AUTO_END_PERMISSION_LOST
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_PAUSE_EXPIRED ->
AUTO_END_PAUSE_EXPIRED
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_MISSING_LISTENER ->
AUTO_END_MISSING_LISTENER
DataProto.ExerciseEndReason.EXERCISE_END_REASON_USER_END -> USER_END
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_SUPERSEDED ->
AUTO_END_SUPERSEDED
DataProto.ExerciseEndReason.EXERCISE_END_REASON_AUTO_END_PREPARE_EXPIRED ->
AUTO_END_PREPARE_EXPIRED
}
}
}