diff options
| -rw-r--r-- | api/system-current.txt | 13 | ||||
| -rw-r--r-- | telephony/java/android/telephony/TelephonyManager.java | 23 | ||||
| -rw-r--r-- | telephony/java/android/telephony/UiccCardInfo.aidl | 19 | ||||
| -rw-r--r-- | telephony/java/android/telephony/UiccCardInfo.java | 156 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/ITelephony.aidl | 12 |
5 files changed, 223 insertions, 0 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 734ac82a261a..f7ea8be5c4f5 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6269,6 +6269,7 @@ package android.telephony { method public int getSimCardState(); method public int getSupportedRadioAccessFamily(); method public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms(); + method public android.telephony.UiccCardInfo[] getUiccCardsInfo(); method public android.telephony.UiccSlotInfo[] getUiccSlotsInfo(); method public android.os.Bundle getVisualVoicemailSettings(); method public int getVoiceActivationState(); @@ -6365,6 +6366,18 @@ package android.telephony { field public static final android.os.Parcelable.Creator<android.telephony.UiccAccessRule> CREATOR; } + public class UiccCardInfo implements android.os.Parcelable { + ctor public UiccCardInfo(boolean, int, java.lang.String, java.lang.String, int); + method public int describeContents(); + method public int getCardId(); + method public java.lang.String getEid(); + method public java.lang.String getIccId(); + method public int getSlotIndex(); + method public boolean isEuicc(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.telephony.UiccCardInfo> CREATOR; + } + public class UiccSlotInfo implements android.os.Parcelable { ctor public UiccSlotInfo(boolean, boolean, java.lang.String, int, int, boolean); method public int describeContents(); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 3b2a05b081c2..d8b430f0f083 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -3196,6 +3196,29 @@ public class TelephonyManager { } /** + * Gets information about currently inserted UICCs and eUICCs. See {@link UiccCardInfo} for more + * details on the kind of information available. + * + * @return UiccCardInfo an array of UiccCardInfo objects, representing information on the + * currently inserted UICCs and eUICCs. + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + public UiccCardInfo[] getUiccCardsInfo() { + try { + ITelephony telephony = getITelephony(); + if (telephony == null) { + return null; + } + return telephony.getUiccCardsInfo(); + } catch (RemoteException e) { + return null; + } + } + + /** * Gets all the UICC slots. The objects in the array can be null if the slot info is not * available, which is possible between phone process starting and getting slot info from modem. * diff --git a/telephony/java/android/telephony/UiccCardInfo.aidl b/telephony/java/android/telephony/UiccCardInfo.aidl new file mode 100644 index 000000000000..882c2333909f --- /dev/null +++ b/telephony/java/android/telephony/UiccCardInfo.aidl @@ -0,0 +1,19 @@ +/* + * 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; + +parcelable UiccCardInfo; diff --git a/telephony/java/android/telephony/UiccCardInfo.java b/telephony/java/android/telephony/UiccCardInfo.java new file mode 100644 index 000000000000..45e4704e8894 --- /dev/null +++ b/telephony/java/android/telephony/UiccCardInfo.java @@ -0,0 +1,156 @@ +/* + * 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.SystemApi; +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.Objects; + +/** + * The UiccCardInfo represents information about a currently inserted UICC or embedded eUICC. + * @hide + */ +@SystemApi +public class UiccCardInfo implements Parcelable { + + private final boolean mIsEuicc; + private final int mCardId; + private final String mEid; + private final String mIccId; + private final int mSlotIndex; + + public static final 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(); + } + + @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); + } + + @Override + public int describeContents() { + return 0; + } + + public UiccCardInfo(boolean isEuicc, int cardId, String eid, String iccId, int slotIndex) { + this.mIsEuicc = isEuicc; + this.mCardId = cardId; + this.mEid = eid; + this.mIccId = iccId; + this.mSlotIndex = slotIndex; + } + + /** + * Return whether the UiccCardInfo 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()}), returns null. + */ + public String getEid() { + if (!mIsEuicc) { + return null; + } + return mEid; + } + + /** + * Get the ICCID of the UICC. + */ + public String getIccId() { + return mIccId; + } + + /** + * Gets the slot index for the slot that the UICC is currently inserted in. + */ + public int getSlotIndex() { + return mSlotIndex; + } + + @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)); + } + + @Override + public int hashCode() { + return Objects.hash(mIsEuicc, mCardId, mEid, mIccId, mSlotIndex); + } + + @Override + public String toString() { + return "UiccCardInfo (mIsEuicc=" + + mIsEuicc + + ", mCardId=" + + mCardId + + ", mEid=" + + mEid + + ", mIccId=" + + mIccId + + ", mSlotIndex=" + + mSlotIndex + + ")"; + } +} diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 399e2553804b..c5d82c5949f0 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -56,6 +56,7 @@ import com.android.internal.telephony.OperatorInfo; import java.util.List; import java.util.Map; +import android.telephony.UiccCardInfo; import android.telephony.UiccSlotInfo; /** @@ -1494,6 +1495,17 @@ interface ITelephony { int getCardIdForDefaultEuicc(int subId, String callingPackage); /** + * Gets information about currently inserted UICCs and eUICCs. See {@link UiccCardInfo} for more + * details on the kind of information available. + * + * @return UiccCardInfo an array of UiccCardInfo objects, representing information on the + * currently inserted UICCs and eUICCs. + * + * @hide + */ + UiccCardInfo[] getUiccCardsInfo(); + + /** * Get slot info for all the UICC slots. * @return UiccSlotInfo array. * @hide |