• 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;
18 
19 import android.annotation.NonNull;
20 import android.annotation.SuppressLint;
21 import android.health.connect.aidl.ReadRecordsRequestParcel;
22 import android.health.connect.datatypes.Metadata;
23 import android.health.connect.datatypes.Record;
24 import android.os.OutcomeReceiver;
25 
26 import java.util.ArrayList;
27 import java.util.List;
28 import java.util.Objects;
29 import java.util.concurrent.Executor;
30 
31 /**
32  * A request class to represent request based on id filters with ids for {@link
33  * HealthConnectManager#readRecords(ReadRecordsRequest, Executor, OutcomeReceiver)}
34  *
35  * @param <T> the type of the Record for the request
36  */
37 public final class ReadRecordsRequestUsingIds<T extends Record> extends ReadRecordsRequest<T> {
38     /** List of {@link RecordIdFilter} */
39     private final List<RecordIdFilter> mRecordIdFiltersList;
40 
41     /**
42      * @see Builder
43      */
ReadRecordsRequestUsingIds( @onNull Class<T> recordType, @NonNull List<RecordIdFilter> recordIdFiltersList)44     private ReadRecordsRequestUsingIds(
45             @NonNull Class<T> recordType, @NonNull List<RecordIdFilter> recordIdFiltersList) {
46         super(recordType);
47         Objects.requireNonNull(recordIdFiltersList);
48         mRecordIdFiltersList = recordIdFiltersList;
49     }
50 
51     /** Returns List of RecordId */
52     @NonNull
getRecordIdFilters()53     public List<RecordIdFilter> getRecordIdFilters() {
54         return mRecordIdFiltersList;
55     }
56 
57     /**
58      * Returns an object of ReadRecordsRequestParcel to carry read request
59      *
60      * @hide
61      */
62     @NonNull
toReadRecordsRequestParcel()63     public ReadRecordsRequestParcel toReadRecordsRequestParcel() {
64         return new ReadRecordsRequestParcel(this);
65     }
66 
67     /** Builder class for {@link ReadRecordsRequestUsingIds} */
68     public static final class Builder<T extends Record> {
69         private final Class<T> mRecordType;
70         private final List<RecordIdFilter> mRecordIdFiltersList = new ArrayList<>();
71 
72         /**
73          * @param recordType Record class for which the id is being set
74          */
Builder(@onNull Class<T> recordType)75         public Builder(@NonNull Class<T> recordType) {
76             Objects.requireNonNull(recordType);
77 
78             mRecordType = recordType;
79         }
80 
81         /**
82          * @param id Identifier generated by the platform and returned by {@link
83          *     HealthConnectManager#insertRecords}
84          */
85         @NonNull
86         @SuppressLint("MissingGetterMatchingBuilder")
addId(@onNull String id)87         public Builder<T> addId(@NonNull String id) {
88             mRecordIdFiltersList.add(RecordIdFilter.fromId(mRecordType, id));
89             return this;
90         }
91 
92         /**
93          * @param clientRecordId identifier that was set while inserting the record
94          * @see Metadata
95          */
96         @SuppressLint("MissingGetterMatchingBuilder")
97         @NonNull
addClientRecordId(@onNull String clientRecordId)98         public Builder<T> addClientRecordId(@NonNull String clientRecordId) {
99             mRecordIdFiltersList.add(
100                     RecordIdFilter.fromClientRecordId(mRecordType, clientRecordId));
101             return this;
102         }
103 
104         /** Returns Object of {@link ReadRecordsRequestUsingIds} */
105         @NonNull
build()106         public ReadRecordsRequestUsingIds<T> build() {
107             if (mRecordIdFiltersList.isEmpty()) {
108                 throw new IllegalArgumentException(
109                         "RecordIdFilter list is empty, "
110                                 + "Either record id or client record id must be set");
111             }
112             return new ReadRecordsRequestUsingIds<>(mRecordType, mRecordIdFiltersList);
113         }
114     }
115 }
116