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