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.restore;
18 
19 import android.annotation.NonNull;
20 import android.health.connect.HealthConnectManager;
21 import android.os.Parcel;
22 import android.os.ParcelFileDescriptor;
23 import android.os.Parcelable;
24 import android.util.ArrayMap;
25 
26 import java.util.Map;
27 import java.util.Objects;
28 
29 /**
30  * Parcelable for passing the request for the {@link
31  * HealthConnectManager#stageAllHealthConnectRemoteData} call.
32  *
33  * @hide
34  */
35 public final class StageRemoteDataRequest implements Parcelable {
36     private final Map<String, ParcelFileDescriptor> mPfdsByFileName;
37 
StageRemoteDataRequest(Parcel in)38     private StageRemoteDataRequest(Parcel in) {
39         int size = in.readInt();
40         mPfdsByFileName = new ArrayMap<>(size);
41         for (int i = 0; i < size; ++i) {
42             mPfdsByFileName.put(
43                     in.readString(),
44                     in.readParcelable(
45                             ParcelFileDescriptor.class.getClassLoader(),
46                             ParcelFileDescriptor.class));
47         }
48     }
49 
StageRemoteDataRequest(@onNull Map<String, ParcelFileDescriptor> pfdsByFileName)50     public StageRemoteDataRequest(@NonNull Map<String, ParcelFileDescriptor> pfdsByFileName) {
51         Objects.requireNonNull(pfdsByFileName);
52         mPfdsByFileName = pfdsByFileName;
53     }
54 
55     @NonNull
56     public static final Creator<StageRemoteDataRequest> CREATOR =
57             new Creator<>() {
58                 @Override
59                 public StageRemoteDataRequest createFromParcel(Parcel in) {
60                     return new StageRemoteDataRequest(in);
61                 }
62 
63                 @Override
64                 public StageRemoteDataRequest[] newArray(int size) {
65                     return new StageRemoteDataRequest[size];
66                 }
67             };
68 
69     @Override
describeContents()70     public int describeContents() {
71         return 0;
72     }
73 
74     @Override
writeToParcel(@onNull Parcel dest, int flags)75     public void writeToParcel(@NonNull Parcel dest, int flags) {
76         dest.writeInt(mPfdsByFileName.size());
77         for (var fileNamePfd : mPfdsByFileName.entrySet()) {
78             dest.writeString(fileNamePfd.getKey());
79             dest.writeParcelable(fileNamePfd.getValue(), /* parcelableFlags */ 0);
80         }
81     }
82 
83     @NonNull
getPfdsByFileName()84     public Map<String, ParcelFileDescriptor> getPfdsByFileName() {
85         return mPfdsByFileName;
86     }
87 }
88