• 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.Identifier;
21 import android.health.connect.datatypes.RecordTypeIdentifier;
22 import android.health.connect.datatypes.StepsCadenceRecord;
23 import android.os.Parcel;
24 
25 import java.time.Instant;
26 import java.util.ArrayList;
27 import java.util.HashSet;
28 import java.util.List;
29 import java.util.Objects;
30 import java.util.Set;
31 
32 /**
33  * @see StepsCadenceRecord
34  * @hide
35  */
36 @Identifier(recordIdentifier = RecordTypeIdentifier.RECORD_TYPE_STEPS_CADENCE)
37 public class StepsCadenceRecordInternal
38         extends SeriesRecordInternal<
39                 StepsCadenceRecord, StepsCadenceRecord.StepsCadenceRecordSample> {
40     private Set<StepsCadenceRecordSample> mStepsCadenceRecordSamples;
41 
42     @Override
43     @NonNull
getSamples()44     public Set<StepsCadenceRecordSample> getSamples() {
45         return mStepsCadenceRecordSamples;
46     }
47 
48     @NonNull
49     @Override
setSamples(Set<? extends Sample> samples)50     public StepsCadenceRecordInternal setSamples(Set<? extends Sample> samples) {
51         Objects.requireNonNull(samples);
52         this.mStepsCadenceRecordSamples = (Set<StepsCadenceRecordSample>) samples;
53         return this;
54     }
55 
56     @Override
57     @NonNull
toExternalRecord()58     public StepsCadenceRecord toExternalRecord() {
59         return new StepsCadenceRecord.Builder(
60                         buildMetaData(), getStartTime(), getEndTime(), getExternalSamples())
61                 .setStartZoneOffset(getStartZoneOffset())
62                 .setEndZoneOffset(getEndZoneOffset())
63                 .buildWithoutValidation();
64     }
65 
66     @Override
populateIntervalRecordFrom(@onNull Parcel parcel)67     void populateIntervalRecordFrom(@NonNull Parcel parcel) {
68         int size = parcel.readInt();
69         mStepsCadenceRecordSamples = new HashSet<>(size);
70         for (int i = 0; i < size; i++) {
71             mStepsCadenceRecordSamples.add(
72                     new StepsCadenceRecordSample(parcel.readDouble(), parcel.readLong()));
73         }
74     }
75 
getExternalSamples()76     private List<StepsCadenceRecord.StepsCadenceRecordSample> getExternalSamples() {
77         List<StepsCadenceRecord.StepsCadenceRecordSample> stepsCadenceRecords =
78                 new ArrayList<>(mStepsCadenceRecordSamples.size());
79         for (StepsCadenceRecordSample stepsCadenceRecordSample : mStepsCadenceRecordSamples) {
80             stepsCadenceRecords.add(
81                     new StepsCadenceRecord.StepsCadenceRecordSample(
82                             stepsCadenceRecordSample.getRate(),
83                             Instant.ofEpochMilli(stepsCadenceRecordSample.getEpochMillis()),
84                             true));
85         }
86         return stepsCadenceRecords;
87     }
88 
89     @Override
populateIntervalRecordTo(@onNull Parcel parcel)90     void populateIntervalRecordTo(@NonNull Parcel parcel) {
91         parcel.writeInt(mStepsCadenceRecordSamples.size());
92         for (StepsCadenceRecordSample stepsCadenceRecordSample : mStepsCadenceRecordSamples) {
93             parcel.writeDouble(stepsCadenceRecordSample.getRate());
94             parcel.writeLong(stepsCadenceRecordSample.getEpochMillis());
95         }
96     }
97 
98     /**
99      * @see StepsCadenceRecord.StepsCadenceRecordSample
100      */
101     public static final class StepsCadenceRecordSample implements Sample {
102         private final double mRate;
103         private final long mEpochMillis;
104 
StepsCadenceRecordSample(double rate, long epochMillis)105         public StepsCadenceRecordSample(double rate, long epochMillis) {
106             mRate = rate;
107             mEpochMillis = epochMillis;
108         }
109 
getRate()110         public double getRate() {
111             return mRate;
112         }
113 
getEpochMillis()114         public long getEpochMillis() {
115             return mEpochMillis;
116         }
117 
118         @Override
equals(@onNull Object object)119         public boolean equals(@NonNull Object object) {
120             if (super.equals(object)
121                     && object instanceof StepsCadenceRecordInternal.StepsCadenceRecordSample) {
122                 StepsCadenceRecordInternal.StepsCadenceRecordSample other =
123                         (StepsCadenceRecordInternal.StepsCadenceRecordSample) object;
124                 return getEpochMillis() == other.getEpochMillis();
125             }
126             return false;
127         }
128 
129         @Override
hashCode()130         public int hashCode() {
131             return Objects.hash(getEpochMillis());
132         }
133     }
134 }
135