blob: b438920362ff3b067fbdcb9bae4046bd844366df [file] [log] [blame]
/*
* Copyright (C) 2018 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.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.Objects;
/**
* The UiccCardInfo represents information about a currently inserted UICC or embedded eUICC.
*/
public final class UiccCardInfo implements Parcelable {
private final boolean mIsEuicc;
private final int mCardId;
private final String mEid;
private final String mIccId;
private final int mSlotIndex;
private final boolean mIsRemovable;
public static final @android.annotation.NonNull Creator<UiccCardInfo> CREATOR = new Creator<UiccCardInfo>() {
@Override
public UiccCardInfo createFromParcel(Parcel in) {
return new UiccCardInfo(in);
}
@Override
public UiccCardInfo[] newArray(int size) {
return new UiccCardInfo[size];
}
};
private UiccCardInfo(Parcel in) {
mIsEuicc = in.readByte() != 0;
mCardId = in.readInt();
mEid = in.readString();
mIccId = in.readString();
mSlotIndex = in.readInt();
mIsRemovable = in.readByte() != 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByte((byte) (mIsEuicc ? 1 : 0));
dest.writeInt(mCardId);
dest.writeString(mEid);
dest.writeString(mIccId);
dest.writeInt(mSlotIndex);
dest.writeByte((byte) (mIsRemovable ? 1 : 0));
}
@Override
public int describeContents() {
return 0;
}
/**
* @hide
*/
public UiccCardInfo(boolean isEuicc, int cardId, String eid, String iccId, int slotIndex,
boolean isRemovable) {
this.mIsEuicc = isEuicc;
this.mCardId = cardId;
this.mEid = eid;
this.mIccId = iccId;
this.mSlotIndex = slotIndex;
this.mIsRemovable = isRemovable;
}
/**
* Return whether the UICC is an eUICC.
* @return true if the UICC is an eUICC.
*/
public boolean isEuicc() {
return mIsEuicc;
}
/**
* Get the card ID of the UICC. See {@link TelephonyManager#getCardIdForDefaultEuicc()} for more
* details on card ID.
*/
public int getCardId() {
return mCardId;
}
/**
* Get the embedded ID (EID) of the eUICC. If the UiccCardInfo is not an eUICC
* (see {@link #isEuicc()}), or the EID is not available, returns null.
* <p>
* Note that this field may be omitted if the caller does not have the correct permissions
* (see {@link TelephonyManager#getUiccCardsInfo()}).
*/
@Nullable
public String getEid() {
if (!mIsEuicc) {
return null;
}
return mEid;
}
/**
* Get the ICCID of the UICC. If the ICCID is not availble, returns null.
* <p>
* Note that this field may be omitted if the caller does not have the correct permissions
* (see {@link TelephonyManager#getUiccCardsInfo()}).
*/
@Nullable
public String getIccId() {
return mIccId;
}
/**
* Gets the slot index for the slot that the UICC is currently inserted in.
*/
public int getSlotIndex() {
return mSlotIndex;
}
/**
* Returns a copy of the UiccCardinfo with the EID and ICCID set to null. These values are
* generally private and require carrier privileges to view.
*
* @hide
*/
@NonNull
public UiccCardInfo getUnprivileged() {
return new UiccCardInfo(mIsEuicc, mCardId, null, null, mSlotIndex, mIsRemovable);
}
/**
* Return whether the UICC or eUICC is removable.
* <p>
* UICCs are generally removable, but eUICCs may be removable or built in to the device.
* @return true if the UICC or eUICC is removable
*/
public boolean isRemovable() {
return mIsRemovable;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
UiccCardInfo that = (UiccCardInfo) obj;
return ((mIsEuicc == that.mIsEuicc)
&& (mCardId == that.mCardId)
&& (Objects.equals(mEid, that.mEid))
&& (Objects.equals(mIccId, that.mIccId))
&& (mSlotIndex == that.mSlotIndex)
&& (mIsRemovable == that.mIsRemovable));
}
@Override
public int hashCode() {
return Objects.hash(mIsEuicc, mCardId, mEid, mIccId, mSlotIndex, mIsRemovable);
}
@Override
public String toString() {
return "UiccCardInfo (mIsEuicc="
+ mIsEuicc
+ ", mCardId="
+ mCardId
+ ", mEid="
+ mEid
+ ", mIccId="
+ mIccId
+ ", mSlotIndex="
+ mSlotIndex
+ ", mIsRemovable="
+ mIsRemovable
+ ")";
}
}