From 296fea744891be4e093adb62a73371a14eae53f3 Mon Sep 17 00:00:00 2001 From: Michael Groover Date: Tue, 21 Jan 2020 20:00:41 -0800 Subject: [PATCH] Update the getIccId docs to reflect access requirements In Android 10 access to device identifiers was limited to apps with the READ_PRIVILEGED_PHONE_STATE permission, carrier privileges, the READ_DEVICE_IDENTIFIERS appop set to allow, or those that pass a device / profile owner check. TelephonyManager#getSimSerialNumber was guarded behind these new access requirements, but the same value is still accessible via SubscriptionInfo#getIccId. This change updates the documentation to reflect that the getIccId will no longer be accessible if the caller does not meet the new access requirements. Bug: 131909991 Test: Builds Change-Id: I03072c65e1c7101538a7a20541d2ac59a2d213e3 --- .../android/telephony/SubscriptionInfo.java | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java index c24eeb74f6cd3..336aa0e6bda6e 100644 --- a/telephony/java/android/telephony/SubscriptionInfo.java +++ b/telephony/java/android/telephony/SubscriptionInfo.java @@ -16,8 +16,6 @@ package android.telephony; -import com.android.telephony.Rlog; - import android.annotation.Nullable; import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; @@ -40,6 +38,7 @@ import android.util.DisplayMetrics; import android.util.Log; import com.android.internal.telephony.util.TelephonyUtils; +import com.android.telephony.Rlog; import java.util.ArrayList; import java.util.Arrays; @@ -217,6 +216,20 @@ public class SubscriptionInfo implements Parcelable { */ private boolean mAreUiccApplicationsEnabled = true; + /** + * Public copy constructor. + * @hide + */ + public SubscriptionInfo(SubscriptionInfo info) { + this(info.mId, info.mIccId, info.mSimSlotIndex, info.mDisplayName, info.mCarrierName, + info.mNameSource, info.mIconTint, info.mNumber, info.mDataRoaming, info.mIconBitmap, + info.mMcc, info.mMnc, info.mCountryIso, info.mIsEmbedded, info.mNativeAccessRules, + info.mCardString, info.mCardId, info.mIsOpportunistic, + info.mGroupUUID == null ? null : info.mGroupUUID.toString(), info.mIsGroupDisabled, + info.mCarrierId, info.mProfileClass, info.mSubscriptionType, info.mGroupOwner, + info.mCarrierConfigAccessRules, info.mAreUiccApplicationsEnabled); + } + /** * @hide */ @@ -292,12 +305,26 @@ public class SubscriptionInfo implements Parcelable { } /** - * @return the ICC ID. + * Returns the ICC ID if the calling app has been granted the READ_PRIVILEGED_PHONE_STATE + * permission, has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}), or + * is a device owner or profile owner that has been granted the READ_PHONE_STATE permission. + * The profile owner is an app that owns a managed profile on the device; for more details see + * Work profiles. Profile + * owner access is deprecated and will be removed in a future release. + * + * @return the ICC ID, or an empty string if one of these requirements is not met */ public String getIccId() { return this.mIccId; } + /** + * @hide + */ + public void clearIccId() { + this.mIccId = ""; + } + /** * @return the slot index of this Subscription's SIM card. */