• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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 package android.health.connect.aidl;
17 
18 import static android.health.connect.Constants.MAXIMUM_PAGE_SIZE;
19 import static android.health.connect.Constants.MINIMUM_PAGE_SIZE;
20 import static android.health.connect.datatypes.MedicalDataSource.validateMedicalDataSourceIds;
21 import static android.health.connect.datatypes.MedicalResource.validateMedicalResourceType;
22 import static android.health.connect.datatypes.validation.ValidationUtils.requireInRange;
23 
24 import static java.util.Objects.requireNonNull;
25 
26 import android.annotation.IntRange;
27 import android.annotation.NonNull;
28 import android.annotation.Nullable;
29 import android.health.connect.HealthConnectManager;
30 import android.health.connect.ReadMedicalResourcesInitialRequest;
31 import android.health.connect.ReadMedicalResourcesPageRequest;
32 import android.health.connect.datatypes.MedicalResource;
33 import android.os.Parcel;
34 import android.os.Parcelable;
35 import android.util.ArraySet;
36 
37 import java.util.ArrayList;
38 import java.util.HashSet;
39 import java.util.Set;
40 
41 /**
42  * A Parcel to carry read request to {@link HealthConnectManager#readMedicalResources}.
43  *
44  * <p>If {@code pageToken} in the request parcel is {@code null}, it means it's the initial request.
45  *
46  * @hide
47  */
48 public class ReadMedicalResourcesRequestParcel implements Parcelable {
49     private final boolean mIsPageRequest;
50     @MedicalResource.MedicalResourceType private int mMedicalResourceType;
51     @NonNull private Set<String> mDataSourceIds = Set.of();
52     @Nullable private String mPageToken = null;
53     private final int mPageSize;
54 
ReadMedicalResourcesRequestParcel(ReadMedicalResourcesInitialRequest request)55     public ReadMedicalResourcesRequestParcel(ReadMedicalResourcesInitialRequest request) {
56         mIsPageRequest = false;
57         mMedicalResourceType = request.getMedicalResourceType();
58         mDataSourceIds = request.getDataSourceIds();
59         mPageSize = request.getPageSize();
60     }
61 
ReadMedicalResourcesRequestParcel(ReadMedicalResourcesPageRequest request)62     public ReadMedicalResourcesRequestParcel(ReadMedicalResourcesPageRequest request) {
63         mIsPageRequest = true;
64         mPageToken = request.getPageToken();
65         mPageSize = request.getPageSize();
66     }
67 
ReadMedicalResourcesRequestParcel(Parcel in)68     private ReadMedicalResourcesRequestParcel(Parcel in) {
69         mIsPageRequest = in.readBoolean();
70         mMedicalResourceType = in.readInt();
71         mDataSourceIds = new HashSet<>(requireNonNull(in.createStringArrayList()));
72         validateMedicalDataSourceIds(mDataSourceIds);
73         mPageToken = in.readString();
74         mPageSize = in.readInt();
75         requireInRange(mPageSize, MINIMUM_PAGE_SIZE, MAXIMUM_PAGE_SIZE, "pageSize");
76 
77         if (mIsPageRequest && mPageToken == null) {
78             throw new IllegalArgumentException(
79                     "pageToken cannot be null when reading Parcel from page request.");
80         } else if (!mIsPageRequest) {
81             validateMedicalResourceType(mMedicalResourceType);
82         }
83     }
84 
85     public static final Creator<ReadMedicalResourcesRequestParcel> CREATOR =
86             new Creator<>() {
87                 @Override
88                 public ReadMedicalResourcesRequestParcel createFromParcel(Parcel in) {
89                     return new ReadMedicalResourcesRequestParcel(in);
90                 }
91 
92                 @Override
93                 public ReadMedicalResourcesRequestParcel[] newArray(int size) {
94                     return new ReadMedicalResourcesRequestParcel[size];
95                 }
96             };
97 
98     @MedicalResource.MedicalResourceType
getMedicalResourceType()99     public int getMedicalResourceType() {
100         return mMedicalResourceType;
101     }
102 
103     @NonNull
getDataSourceIds()104     public Set<String> getDataSourceIds() {
105         return new ArraySet<>(mDataSourceIds);
106     }
107 
108     @Nullable
getPageToken()109     public String getPageToken() {
110         return mPageToken;
111     }
112 
113     @IntRange(from = MINIMUM_PAGE_SIZE, to = MAXIMUM_PAGE_SIZE)
getPageSize()114     public int getPageSize() {
115         return mPageSize;
116     }
117 
118     @Override
describeContents()119     public int describeContents() {
120         return 0;
121     }
122 
123     @Override
writeToParcel(@onNull Parcel dest, int flags)124     public void writeToParcel(@NonNull Parcel dest, int flags) {
125         dest.writeBoolean(mIsPageRequest);
126         dest.writeInt(mMedicalResourceType);
127         dest.writeStringList(new ArrayList<>(mDataSourceIds));
128         dest.writeString(mPageToken);
129         dest.writeInt(mPageSize);
130     }
131 }
132