• 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;
17 
18 import static android.health.connect.Constants.DEFAULT_PAGE_SIZE;
19 import static android.health.connect.Constants.MAXIMUM_PAGE_SIZE;
20 import static android.health.connect.Constants.MINIMUM_PAGE_SIZE;
21 import static android.health.connect.datatypes.validation.ValidationUtils.requireInRange;
22 
23 import static com.android.healthfitness.flags.Flags.FLAG_PERSONAL_HEALTH_RECORD;
24 
25 import static java.util.Objects.hash;
26 import static java.util.Objects.requireNonNull;
27 
28 import android.annotation.FlaggedApi;
29 import android.annotation.IntRange;
30 import android.annotation.NonNull;
31 import android.health.connect.aidl.ReadMedicalResourcesRequestParcel;
32 
33 /**
34  * A page read request with specified {@code pageToken} for {@link
35  * HealthConnectManager#readMedicalResources}.
36  *
37  * <p>When making a new initial request with new filters, use {@link
38  * ReadMedicalResourcesInitialRequest}.
39  *
40  * <p>Example usage:
41  *
42  * <pre>{@code
43  * ReadMedicalResourcesInitialRequest initialRequest
44  *     = new ReadMedicalResourcesInitialRequest.Builder(...).build();
45  * ReadMedicalResourcesResponse response = makeRequest(initialRequest);
46  * String pageToken = response.getNextPageToken();
47  *
48  * while (pageToken != null) {
49  *     ReadMedicalResourcesPageRequest pageRequest = new ReadMedicalResourcesPageRequest(pageToken);
50  *     response = makeRequest(pageRequest);
51  *     pageToken = response.getNextPageToken();
52  * }
53  * }</pre>
54  */
55 @FlaggedApi(FLAG_PERSONAL_HEALTH_RECORD)
56 public final class ReadMedicalResourcesPageRequest extends ReadMedicalResourcesRequest {
57     @NonNull private final String mPageToken;
58 
59     /**
60      * Creates a new instance of {@link ReadMedicalResourcesPageRequest}. Please see {@link
61      * ReadMedicalResourcesPageRequest.Builder} for more detailed parameters information.
62      */
ReadMedicalResourcesPageRequest( @onNull String pageToken, @IntRange(from = MINIMUM_PAGE_SIZE, to = MAXIMUM_PAGE_SIZE) int pageSize)63     private ReadMedicalResourcesPageRequest(
64             @NonNull String pageToken,
65             @IntRange(from = MINIMUM_PAGE_SIZE, to = MAXIMUM_PAGE_SIZE) int pageSize) {
66         super(pageSize);
67         requireNonNull(pageToken);
68         mPageToken = pageToken;
69     }
70 
71     /** Returns the page token to read the requested page. */
72     @NonNull
getPageToken()73     public String getPageToken() {
74         return mPageToken;
75     }
76 
77     @Override
equals(Object o)78     public boolean equals(Object o) {
79         if (this == o) return true;
80         if (!(o instanceof ReadMedicalResourcesPageRequest that)) return false;
81         return getPageToken().equals(that.getPageToken()) && getPageSize() == that.getPageSize();
82     }
83 
84     @Override
hashCode()85     public int hashCode() {
86         return hash(getPageToken(), getPageSize());
87     }
88 
89     @Override
toString()90     public String toString() {
91         return this.getClass().getSimpleName()
92                 + "{"
93                 + "pageToken="
94                 + getPageToken()
95                 + ",pageSize="
96                 + getPageSize()
97                 + "}";
98     }
99 
100     /**
101      * Returns an instance of {@link ReadMedicalResourcesRequestParcel} to carry the request.
102      *
103      * @hide
104      */
toParcel()105     public ReadMedicalResourcesRequestParcel toParcel() {
106         return new ReadMedicalResourcesRequestParcel(this);
107     }
108 
109     /** Builder class for {@link ReadMedicalResourcesPageRequest}. */
110     public static final class Builder {
111         @NonNull private String mPageToken;
112         private int mPageSize = DEFAULT_PAGE_SIZE;
113 
114         /**
115          * Constructs a new {@link ReadMedicalResourcesPageRequest} instance.
116          *
117          * @param pageToken The page token to read the requested page of the result, from the
118          *     previous {@link ReadMedicalResourcesResponse#getNextPageToken()}.
119          */
Builder(@onNull String pageToken)120         public Builder(@NonNull String pageToken) {
121             requireNonNull(pageToken);
122             mPageToken = pageToken;
123         }
124 
125         /** Constructs a clone of the other {@link ReadMedicalResourcesPageRequest.Builder}. */
Builder(@onNull Builder other)126         public Builder(@NonNull Builder other) {
127             mPageToken = other.mPageToken;
128             mPageSize = other.mPageSize;
129         }
130 
131         /** Constructs a clone of the other {@link ReadMedicalResourcesPageRequest} instance. */
Builder(@onNull ReadMedicalResourcesPageRequest other)132         public Builder(@NonNull ReadMedicalResourcesPageRequest other) {
133             mPageToken = other.getPageToken();
134             mPageSize = other.getPageSize();
135         }
136 
137         /**
138          * Sets page token to read the requested page of the result, from the previous {@link
139          * ReadMedicalResourcesResponse#getNextPageToken()}.
140          */
141         @NonNull
setPageToken(@onNull String pageToken)142         public Builder setPageToken(@NonNull String pageToken) {
143             requireNonNull(pageToken);
144             mPageToken = pageToken;
145             return this;
146         }
147 
148         /**
149          * Sets the maximum number of {@code MedicalResource}s to be returned by the read operation.
150          *
151          * <p>If not set, default to 1000.
152          *
153          * @throws IllegalArgumentException if the provided {@code pageSize} is less than 1 or more
154          *     than 5000.
155          */
156         @NonNull
setPageSize( @ntRangefrom = MINIMUM_PAGE_SIZE, to = MAXIMUM_PAGE_SIZE) int pageSize)157         public Builder setPageSize(
158                 @IntRange(from = MINIMUM_PAGE_SIZE, to = MAXIMUM_PAGE_SIZE) int pageSize) {
159             requireInRange(pageSize, MINIMUM_PAGE_SIZE, MAXIMUM_PAGE_SIZE, "pageSize");
160             mPageSize = pageSize;
161             return this;
162         }
163 
164         /**
165          * Returns a new instance of {@link ReadMedicalResourcesPageRequest} with the specified
166          * parameters.
167          */
168         @NonNull
build()169         public ReadMedicalResourcesPageRequest build() {
170             return new ReadMedicalResourcesPageRequest(mPageToken, mPageSize);
171         }
172     }
173 }
174