• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.internal.datatypes;
18 
19 import android.annotation.NonNull;
20 import android.health.connect.datatypes.ExerciseSegment;
21 import android.health.connect.datatypes.ExerciseSegmentType;
22 import android.os.Parcel;
23 
24 import com.android.internal.annotations.VisibleForTesting;
25 
26 import java.time.Instant;
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.Objects;
30 
31 /**
32  * Internal ExerciseSegment. Part of {@link ExerciseSessionRecordInternal}
33  *
34  * @hide
35  */
36 public class ExerciseSegmentInternal {
37 
38     private long mStartTime;
39     private long mEndTime;
40 
41     @ExerciseSegmentType.ExerciseSegmentTypes private int mSegmentType;
42 
43     private int mRepetitionsCount;
44 
45     /** Reads record from parcel. */
46     @VisibleForTesting
readFromParcel(Parcel parcel)47     public static ExerciseSegmentInternal readFromParcel(Parcel parcel) {
48         return new ExerciseSegmentInternal()
49                 .setStarTime(parcel.readLong())
50                 .setEndTime(parcel.readLong())
51                 .setRepetitionsCount(parcel.readInt())
52                 .setSegmentType(parcel.readInt());
53     }
54 
populateSegmentsFromParcel(Parcel parcel)55     static List<ExerciseSegmentInternal> populateSegmentsFromParcel(Parcel parcel) {
56         int size = parcel.readInt();
57         if (size == 0) {
58             return null;
59         }
60         ArrayList<ExerciseSegmentInternal> segments = new ArrayList<>(size);
61         for (int i = 0; i < size; i++) {
62             segments.add(ExerciseSegmentInternal.readFromParcel(parcel));
63         }
64         return segments;
65     }
66 
getExternalSegments( @onNull List<ExerciseSegmentInternal> internalSegments)67     static List<ExerciseSegment> getExternalSegments(
68             @NonNull List<ExerciseSegmentInternal> internalSegments) {
69         List<ExerciseSegment> externalSegments = new ArrayList<>(internalSegments.size());
70         internalSegments.forEach((segment) -> externalSegments.add(segment.toExternalRecord()));
71         return externalSegments;
72     }
73 
writeSegmentsToParcel(List<ExerciseSegmentInternal> segments, Parcel parcel)74     static void writeSegmentsToParcel(List<ExerciseSegmentInternal> segments, Parcel parcel) {
75         if (segments == null) {
76             parcel.writeInt(0);
77             return;
78         }
79         parcel.writeInt(segments.size());
80         segments.forEach((segment) -> segment.writeToParcel(parcel));
81     }
82 
83     /** Writes record to parcel. */
84     @VisibleForTesting
writeToParcel(Parcel parcel)85     public void writeToParcel(Parcel parcel) {
86         parcel.writeLong(mStartTime);
87         parcel.writeLong(mEndTime);
88         parcel.writeInt(mRepetitionsCount);
89         parcel.writeInt(mSegmentType);
90     }
91 
92     /** Sets segment type. Returns record with type set. */
93     @VisibleForTesting
toExternalRecord()94     public ExerciseSegment toExternalRecord() {
95         return new ExerciseSegment.Builder(
96                         Instant.ofEpochMilli(getStartTime()),
97                         Instant.ofEpochMilli(getEndTime()),
98                         getSegmentType())
99                 .setRepetitionsCount(getRepetitionsCount())
100                 .buildWithoutValidation();
101     }
102 
103     /** Sets segment start time. Returns record with start time set. */
setStarTime(long startTime)104     public ExerciseSegmentInternal setStarTime(long startTime) {
105         mStartTime = startTime;
106         return this;
107     }
108 
109     /** Sets segment end time. Returns record with end time set. */
setEndTime(long endTime)110     public ExerciseSegmentInternal setEndTime(long endTime) {
111         mEndTime = endTime;
112         return this;
113     }
114 
115     /** Returns segment start time. */
getStartTime()116     public long getStartTime() {
117         return mStartTime;
118     }
119 
120     /** Returns segments end time. */
getEndTime()121     public long getEndTime() {
122         return mEndTime;
123     }
124 
125     /** Returns segments repetitions count. */
getRepetitionsCount()126     public int getRepetitionsCount() {
127         return mRepetitionsCount;
128     }
129 
130     /** Sets segment repetitions count. Return record with repetitions set. */
setRepetitionsCount(int repetitionsCount)131     public ExerciseSegmentInternal setRepetitionsCount(int repetitionsCount) {
132         mRepetitionsCount = repetitionsCount;
133         return this;
134     }
135 
136     /** Returns segment type. */
getSegmentType()137     public int getSegmentType() {
138         return mSegmentType;
139     }
140 
141     /** Sets segment type. Returns record with type set. */
setSegmentType(int segmentType)142     public ExerciseSegmentInternal setSegmentType(int segmentType) {
143         mSegmentType = segmentType;
144         return this;
145     }
146 
147     @Override
equals(Object o)148     public boolean equals(Object o) {
149         if (this == o) return true;
150         if (!(o instanceof ExerciseSegmentInternal)) return false;
151         ExerciseSegmentInternal that = (ExerciseSegmentInternal) o;
152         return mSegmentType == that.mSegmentType
153                 && mRepetitionsCount == that.mRepetitionsCount
154                 && mStartTime == that.mStartTime
155                 && mEndTime == that.mEndTime;
156     }
157 
158     @Override
hashCode()159     public int hashCode() {
160         return Objects.hash(mStartTime, mEndTime, mSegmentType, mRepetitionsCount);
161     }
162 }
163