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.migration; 18 19 import android.annotation.IntRange; 20 import android.annotation.NonNull; 21 import android.annotation.SystemApi; 22 import android.os.Parcel; 23 import android.os.Parcelable; 24 25 /** 26 * Holds miscellaneous user-set preferences. 27 * 28 * @hide 29 */ 30 @SystemApi 31 public final class MetadataMigrationPayload extends MigrationPayload implements Parcelable { 32 33 @NonNull 34 public static final Creator<MetadataMigrationPayload> CREATOR = 35 new Creator<>() { 36 @Override 37 public MetadataMigrationPayload createFromParcel(Parcel in) { 38 in.readInt(); // Skip the type 39 return new MetadataMigrationPayload(in); 40 } 41 42 @Override 43 public MetadataMigrationPayload[] newArray(int size) { 44 return new MetadataMigrationPayload[size]; 45 } 46 }; 47 48 private final int mRecordRetentionPeriodDays; 49 MetadataMigrationPayload(@ntRangefrom = 0, to = 7300) int recordRetentionPeriodDays)50 private MetadataMigrationPayload(@IntRange(from = 0, to = 7300) int recordRetentionPeriodDays) { 51 mRecordRetentionPeriodDays = recordRetentionPeriodDays; 52 } 53 MetadataMigrationPayload(@onNull Parcel in)54 MetadataMigrationPayload(@NonNull Parcel in) { 55 mRecordRetentionPeriodDays = in.readInt(); 56 } 57 58 @Override writeToParcel(@onNull Parcel dest, int flags)59 public void writeToParcel(@NonNull Parcel dest, int flags) { 60 dest.writeInt(TYPE_METADATA); 61 62 dest.writeInt(mRecordRetentionPeriodDays); 63 } 64 65 @Override describeContents()66 public int describeContents() { 67 return 0; 68 } 69 70 /** Returns record retention period in days. */ getRecordRetentionPeriodDays()71 public int getRecordRetentionPeriodDays() { 72 return mRecordRetentionPeriodDays; 73 } 74 75 /** Builder for {@link MetadataMigrationPayload}. */ 76 public static final class Builder { 77 private static final int MIN_RRP = 0; 78 private static final int MAX_RRP = 7300; 79 80 private int mRecordRetentionPeriodDays = 0; 81 82 /** Sets the value for {@link MetadataMigrationPayload#getRecordRetentionPeriodDays()}. */ 83 @NonNull setRecordRetentionPeriodDays( @ntRangefrom = MIN_RRP, to = MAX_RRP) int recordRetentionPeriodDays)84 public Builder setRecordRetentionPeriodDays( 85 @IntRange(from = MIN_RRP, to = MAX_RRP) int recordRetentionPeriodDays) { 86 if ((recordRetentionPeriodDays < MIN_RRP) || (recordRetentionPeriodDays > MAX_RRP)) { 87 throw new IllegalArgumentException( 88 "recordRetentionPeriodDays is not within the range, was: " 89 + recordRetentionPeriodDays); 90 } 91 92 mRecordRetentionPeriodDays = recordRetentionPeriodDays; 93 return this; 94 } 95 96 /** 97 * Creates a new instance of {@link MetadataMigrationPayload} with the specified arguments. 98 */ 99 @NonNull build()100 public MetadataMigrationPayload build() { 101 return new MetadataMigrationPayload(mRecordRetentionPeriodDays); 102 } 103 } 104 } 105