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