/* * Copyright (C) 2024 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.telephony; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; import androidx.annotation.NonNull; import com.android.telephony.Rlog; import java.util.ArrayList; import java.util.List; /** * CarrierInfo that is used to represent the carrier lock information details. * * @hide */ public final class CarrierInfo implements Parcelable { /** * Used to create a {@link CarrierInfo} from a {@link Parcel}. * * @hide */ public static final @android.annotation.NonNull Creator CREATOR = new Creator() { /** * Create a new instance of the Parcelable class, instantiating it * from the given Parcel whose data had previously been written by * {@link Parcelable#writeToParcel Parcelable.writeToParcel()}. * * @param source The Parcel to read the object's data from. * @return Returns a new instance of the Parcelable class. */ @Override public CarrierInfo createFromParcel(Parcel source) { return new CarrierInfo(source); } /** * Create a new array of the Parcelable class. * * @param size Size of the array. * @return Returns an array of the Parcelable class, with every entry * initialized to null. */ @Override public CarrierInfo[] newArray(int size) { return new CarrierInfo[size]; } }; @NonNull private String mMcc; @NonNull private String mMnc; @Nullable private String mSpn; @Nullable private String mGid1; @Nullable private String mGid2; @Nullable private String mImsiPrefix; /** Ehplmn is String combination of MCC,MNC */ @Nullable private List mEhplmn; @Nullable private String mIccid; @Nullable private String mImpi; /** @hide */ @NonNull public String getMcc() { return mMcc; } /** @hide */ @NonNull public String getMnc() { return mMnc; } /** @hide */ @Nullable public String getSpn() { return mSpn; } /** @hide */ @Nullable public String getGid1() { return mGid1; } /** @hide */ @Nullable public String getGid2() { return mGid2; } /** @hide */ @Nullable public String getImsiPrefix() { return mImsiPrefix; } /** @hide */ @Nullable public String getIccid() { return mIccid; } /** @hide */ @Nullable public String getImpi() { return mImpi; } /** * Returns the list of EHPLMN. * * @return List of String that represent Ehplmn. * @hide */ @NonNull public List getEhplmn() { return mEhplmn; } /** @hide */ public CarrierInfo(@NonNull String mcc, @NonNull String mnc, @Nullable String spn, @Nullable String gid1, @Nullable String gid2, @Nullable String imsi, @Nullable String iccid, @Nullable String impi, @Nullable List plmnArrayList) { mMcc = mcc; mMnc = mnc; mSpn = spn; mGid1 = gid1; mGid2 = gid2; mImsiPrefix = imsi; mIccid = iccid; mImpi = impi; mEhplmn = plmnArrayList; } /** * Describe the kinds of special objects contained in this Parcelable * instance's marshaled representation. For example, if the object will * include a file descriptor in the output of {@link #writeToParcel(Parcel, int)}, * the return value of this method must include the * {@link #CONTENTS_FILE_DESCRIPTOR} bit. * * @return a bitmask indicating the set of special object types marshaled * by this Parcelable object instance. * @hide */ @Override public int describeContents() { return 0; } /** * Flatten this object in to a Parcel. * * @param dest The Parcel in which the object should be written. * @param flags Additional flags about how the object should be written. * May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}. * @hide */ @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString8(mMcc); dest.writeString8(mMnc); dest.writeString8(mSpn); dest.writeString8(mGid1); dest.writeString8(mGid2); dest.writeString8(mImsiPrefix); dest.writeString8(mIccid); dest.writeString8(mImpi); dest.writeStringList(mEhplmn); } /** @hide */ public CarrierInfo(Parcel in) { mEhplmn = new ArrayList(); mMcc = in.readString8(); mMnc = in.readString8(); mSpn = in.readString8(); mGid1 = in.readString8(); mGid2 = in.readString8(); mImsiPrefix = in.readString8(); mIccid = in.readString8(); mImpi = in.readString8(); in.readStringList(mEhplmn); } /** @hide */ @android.annotation.NonNull @Override public String toString() { return "CarrierInfo MCC = " + mMcc + " MNC = " + mMnc + " SPN = " + mSpn + " GID1 = " + mGid1 + " GID2 = " + mGid2 + " IMSI = " + getPrintableImsi() + " ICCID = " + SubscriptionInfo.getPrintableId(mIccid) + " IMPI = " + mImpi + " EHPLMN = [ " + getEhplmn_toString() + " ]"; } private String getEhplmn_toString() { return String.join(" ", mEhplmn); } private String getPrintableImsi() { boolean enablePiiLog = Rlog.isLoggable("CarrierInfo", Log.VERBOSE); return ((mImsiPrefix != null && mImsiPrefix.length() > 6) ? mImsiPrefix.substring(0, 6) + Rlog.pii(enablePiiLog, mImsiPrefix.substring(6)) : mImsiPrefix); } }