| /** |
| * 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 com.android.healthconnect.controller.dataentries.units |
| |
| import com.android.healthconnect.controller.dataentries.units.DistanceUnit.KILOMETERS |
| import com.android.healthconnect.controller.dataentries.units.DistanceUnit.MILES |
| import com.android.healthconnect.controller.dataentries.units.HeightUnit.CENTIMETERS |
| import com.android.healthconnect.controller.dataentries.units.HeightUnit.FEET |
| |
| /** Length conversion utilities. */ |
| object LengthConverter { |
| private const val METERS_PER_MILE = 1609.3444978925634 |
| private const val METERS_PER_KM = 1000.0 |
| private const val CM_PER_METER = 100.0 |
| private const val INCHES_PER_METER = 39.3701 |
| |
| /** |
| * Converts from meters to the provided distance units (miles or km) |
| * |
| * @param unit the units type to convert the passed in sourceCMeters (m) to |
| * @param source the m length to convert to toUnit length |
| * @return the sourceMeters in toUnit length units |
| */ |
| fun convertDistanceFromMeters(unit: DistanceUnit, source: Double): Double { |
| return when (unit) { |
| MILES -> source / METERS_PER_MILE |
| KILOMETERS -> source / METERS_PER_KM |
| } |
| } |
| |
| /** |
| * Converts from meters to the provided height units (cm or in) |
| * |
| * @param unit the units type to convert the passed in sourceMeters (m) to |
| * @param sourceMeters the m length to convert to unit length |
| * @return the sourceMeters in toUnit length units |
| */ |
| fun convertHeightFromMeters(unit: HeightUnit, sourceMeters: Double) : Double { |
| return when(unit) { |
| CENTIMETERS -> sourceMeters * CM_PER_METER |
| FEET -> sourceMeters * INCHES_PER_METER |
| } |
| } |
| } |