1d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson/*
2d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * Copyright (C) 2017 The Android Open Source Project
3d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson *
4d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * Licensed under the Apache License, Version 2.0 (the "License");
5d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * you may not use this file except in compliance with the License.
6d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * You may obtain a copy of the License at
7d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson *
8d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson *      http://www.apache.org/licenses/LICENSE-2.0
9d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson *
10d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * Unless required by applicable law or agreed to in writing, software
11d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * distributed under the License is distributed on an "AS IS" BASIS,
12d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * See the License for the specific language governing permissions and
14d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * limitations under the License.
15d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson */
16d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidsonpackage android.service.euicc;
17d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
18d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidsonimport android.annotation.Nullable;
19d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidsonimport android.os.Parcel;
20d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidsonimport android.os.Parcelable;
21d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
22d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson/**
23d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * Result of a {@link EuiccService#onGetEuiccProfileInfoList} operation.
24d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * @hide
25d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson *
26d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson * TODO(b/35851809): Make this a SystemApi.
27d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson */
28d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidsonpublic final class GetEuiccProfileInfoListResult implements Parcelable {
29d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
30d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    public static final Creator<GetEuiccProfileInfoListResult> CREATOR =
31d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson            new Creator<GetEuiccProfileInfoListResult>() {
3283f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                @Override
3383f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                public GetEuiccProfileInfoListResult createFromParcel(Parcel in) {
3483f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                    return new GetEuiccProfileInfoListResult(in);
3583f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                }
36d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
3783f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                @Override
3883f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                public GetEuiccProfileInfoListResult[] newArray(int size) {
3983f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                    return new GetEuiccProfileInfoListResult[size];
4083f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                }
4183f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson            };
42d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
4383f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson    /**
4483f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     * Result of the operation.
4583f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     *
4683f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     * <p>May be one of the predefined {@code RESULT_} constants in EuiccService or any
4783f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     * implementation-specific code starting with {@link EuiccService#RESULT_FIRST_USER}.
4883f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     */
4983f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson    public final int result;
50d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
51d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    /** The profile list (only upon success). */
52d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    @Nullable
53d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    public final EuiccProfileInfo[] profiles;
54d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
55d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    /** Whether the eUICC is removable. */
56d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    public final boolean isRemovable;
57d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
5883f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson    /**
5983f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     * Construct a new {@link GetEuiccProfileInfoListResult}.
6083f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     *
6183f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     * @param result Result of the operation. May be one of the predefined {@code RESULT_} constants
6283f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     *     in EuiccService or any implementation-specific code starting with
6383f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     *     {@link EuiccService#RESULT_FIRST_USER}.
6483f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     * @param profiles the list of profiles. Should only be provided if the result is
6583f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     *     {@link EuiccService#RESULT_OK}.
6683f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     * @param isRemovable whether the eUICC in this slot is removable. If true, the profiles
6783f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     *     returned here will only be considered accessible as long as this eUICC is present.
6883f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     *     Otherwise, they will remain accessible until the next time a response with isRemovable
6983f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     *     set to false is returned.
7083f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson     */
7183f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson    public GetEuiccProfileInfoListResult(
7283f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson            int result, @Nullable EuiccProfileInfo[] profiles, boolean isRemovable) {
73d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        this.result = result;
74d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        this.isRemovable = isRemovable;
7583f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson        if (this.result == EuiccService.RESULT_OK) {
7683f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson            this.profiles = profiles;
7783f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson        } else {
7883f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson            if (profiles != null) {
7983f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                throw new IllegalArgumentException(
8083f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson                        "Error result with non-null profiles: " + result);
8183f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson            }
8283f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson            this.profiles = null;
8383f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson        }
8483f8bc81be65cb09720c6d8dac7717d4652cd931Jeff Davidson
85d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    }
86d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
87d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    private GetEuiccProfileInfoListResult(Parcel in) {
88d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        this.result = in.readInt();
89d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        this.profiles = in.createTypedArray(EuiccProfileInfo.CREATOR);
90d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        this.isRemovable = in.readBoolean();
91d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    }
92d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
93d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    @Override
94d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    public void writeToParcel(Parcel dest, int flags) {
95d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        dest.writeInt(result);
96d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        dest.writeTypedArray(profiles, flags);
97d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        dest.writeBoolean(isRemovable);
98d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    }
99d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson
100d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    @Override
101d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    public int describeContents() {
102d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson        return 0;
103d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson    }
104d02731ffff9b8eb9b604377f50b2c43a9c753c2eJeff Davidson}
105