1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.health.connect.datatypes.units;
18 
19 import android.annotation.NonNull;
20 
21 import java.util.Objects;
22 
23 /** Represents a unit of speed. Supported units: metersPerSecond */
24 public final class Velocity implements Comparable<Velocity> {
25     private final double mInMetersPerSecond;
26 
Velocity(double value)27     private Velocity(double value) {
28         mInMetersPerSecond = value;
29     }
30 
31     /**
32      * Creates a Velocity object with the specified value in meters per second.
33      *
34      * @param value value to be set as meters per second.
35      */
36     @NonNull
fromMetersPerSecond(double value)37     public static Velocity fromMetersPerSecond(double value) {
38         return new Velocity(value);
39     }
40 
41     /** Returns velocity in meters per second */
getInMetersPerSecond()42     public double getInMetersPerSecond() {
43         return mInMetersPerSecond;
44     }
45 
46     /**
47      * Compares this object with the specified object for order. Returns a negative integer, zero,
48      * or a positive integer as this object is less than, equal to, or greater than the specified
49      * object.
50      *
51      * @param other the object to be compared.
52      * @return a negative integer, zero, or a positive integer as this object is less than, equal
53      *     to, or greater than the specified object.
54      * @throws NullPointerException if the specified object is null
55      * @throws ClassCastException if the specified object's type prevents it from being compared to
56      *     this object.
57      */
58     @Override
compareTo(@onNull Velocity other)59     public int compareTo(@NonNull Velocity other) {
60         return Double.compare(this.mInMetersPerSecond, other.mInMetersPerSecond);
61     }
62 
63     /**
64      * Indicates whether some other object is "equal to" this one.
65      *
66      * @param object the reference object with which to compare.
67      * @return {@code true} if this object is the same as the object argument; {@code false}
68      *     otherwise.
69      */
70     @Override
equals(Object object)71     public boolean equals(Object object) {
72         if (this == object) return true;
73         if (object instanceof Velocity) {
74             Velocity other = (Velocity) object;
75             return this.getInMetersPerSecond() == other.getInMetersPerSecond();
76         }
77         return false;
78     }
79 
80     /**
81      * Returns a hash code value for the object.
82      *
83      * @return a hash code value for this object.
84      */
85     @Override
hashCode()86     public int hashCode() {
87         return Objects.hash(this.getInMetersPerSecond());
88     }
89 
90     /**
91      * @return a string representation of the object.
92      */
93     @Override
toString()94     public String toString() {
95         return mInMetersPerSecond + " meters/sec";
96     }
97 }
98