/* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.health.connect.changelog; import static android.health.connect.Constants.DEFAULT_PAGE_SIZE; import static android.health.connect.Constants.MAXIMUM_PAGE_SIZE; import android.annotation.IntRange; import android.annotation.NonNull; import android.health.connect.HealthConnectManager; import android.os.Parcel; import android.os.Parcelable; import java.util.Objects; /** Request class for {@link HealthConnectManager#getChangeLogs} */ public final class ChangeLogsRequest implements Parcelable { private final String mToken; private final int mPageSize; /** * @see Builder */ private ChangeLogsRequest(@NonNull String token, int pageSize) { Objects.requireNonNull(token); mToken = token; mPageSize = pageSize; } private ChangeLogsRequest(Parcel in) { mToken = in.readString(); mPageSize = in.readInt(); } @NonNull public static final Creator CREATOR = new Creator() { @Override public ChangeLogsRequest createFromParcel(Parcel in) { return new ChangeLogsRequest(in); } @Override public ChangeLogsRequest[] newArray(int size) { return new ChangeLogsRequest[size]; } }; /** Returns the token for the change logs request */ @NonNull public String getToken() { return mToken; } /** * Returns the maximum number of records requested using {@link * HealthConnectManager#getChangeLogs} operation */ @IntRange(from = 1, to = 5000) public int getPageSize() { return mPageSize; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString(mToken); dest.writeInt(mPageSize); } /** Builder class for {@link ChangeLogsRequest} */ public static final class Builder { private String mToken; private int mPageSize = DEFAULT_PAGE_SIZE; public Builder(@NonNull String token) { Objects.requireNonNull(token); mToken = token; } /** * @param pageSize number of change logs to be returned, this corresponds to the maximum * number of entries to be returned i.e. sum of the response within {@link * ChangeLogsResponse} *

If not set default is 1000 and maximum value is 5000. * @throws IllegalArgumentException if requested pageSize > 5000 or < 1 */ @NonNull public Builder setPageSize(@IntRange(from = 1, to = 5000) int pageSize) { if (pageSize > MAXIMUM_PAGE_SIZE) { throw new IllegalArgumentException( "Maximum page size: " + MAXIMUM_PAGE_SIZE + ", requested: " + pageSize); } if (pageSize < 1) { throw new IllegalArgumentException("Minimum page size: 1, requested: " + pageSize); } mPageSize = pageSize; return this; } /** Returns Object of {@link ChangeLogsRequest} */ @NonNull public ChangeLogsRequest build() { return new ChangeLogsRequest(mToken, mPageSize); } } }