From 5be6e9cb27a4bf3d4e7d2e773eea4061a8881000 Mon Sep 17 00:00:00 2001 From: Grace Chen Date: Thu, 20 Dec 2018 22:50:18 -0800 Subject: [PATCH] Add profile class in SubscriptionInfo database Bug: 116732485 Test: Basic telephony sanity Change-Id: I28a6d64c90db94ef0735f4d97f430560b733e797 Merged-In: I28a6d64c90db94ef0735f4d97f430560b733e797 --- api/system-current.txt | 6 ++ .../android/telephony/SubscriptionInfo.java | 41 ++++++++--- .../telephony/SubscriptionManager.java | 69 +++++++++++++++++++ 3 files changed, 108 insertions(+), 8 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index 189611d2040ba..fdb09d639360e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5392,6 +5392,7 @@ package android.telephony { public class SubscriptionInfo implements android.os.Parcelable { method public java.util.List getAccessRules(); method public int getCardId(); + method public int getProfileClass(); } public class SubscriptionManager { @@ -5400,6 +5401,11 @@ package android.telephony { method public void setDefaultDataSubId(int); method public void setDefaultSmsSubId(int); field public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI; + field public static final int PROFILE_CLASS_DEFAULT = -1; // 0xffffffff + field public static final int PROFILE_CLASS_OPERATIONAL = 2; // 0x2 + field public static final int PROFILE_CLASS_PROVISIONING = 1; // 0x1 + field public static final int PROFILE_CLASS_TESTING = 0; // 0x0 + field public static final int PROFILE_CLASS_UNSET = -1; // 0xffffffff field public static final android.net.Uri VT_ENABLED_CONTENT_URI; field public static final android.net.Uri WFC_ENABLED_CONTENT_URI; field public static final android.net.Uri WFC_MODE_CONTENT_URI; diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java index 0a58fa08f32e7..4a25818c82b81 100644 --- a/telephony/java/android/telephony/SubscriptionInfo.java +++ b/telephony/java/android/telephony/SubscriptionInfo.java @@ -173,6 +173,16 @@ public class SubscriptionInfo implements Parcelable { */ private boolean mIsGroupDisabled = false; + /** + * Profile class, PROFILE_CLASS_TESTING, PROFILE_CLASS_OPERATIONAL + * PROFILE_CLASS_PROVISIONING, or PROFILE_CLASS_UNSET. + * A profile on the eUICC can be defined as test, operational, provisioning, or unset. + * The profile class will be populated from the profile metadata if present. Otherwise, + * the profile class defaults to unset if there is no profile metadata or the subscription + * is not on an eUICC ({@link #isEmbedded} returns false). + */ + private int mProfileClass; + /** * @hide */ @@ -182,7 +192,8 @@ public class SubscriptionInfo implements Parcelable { @Nullable UiccAccessRule[] accessRules, String cardString) { this(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, roaming, icon, mcc, mnc, countryIso, isEmbedded, accessRules, cardString, - false, null, true, TelephonyManager.UNKNOWN_CARRIER_ID); + false, null, true, TelephonyManager.UNKNOWN_CARRIER_ID, + SubscriptionManager.PROFILE_CLASS_DEFAULT); } /** @@ -192,10 +203,10 @@ public class SubscriptionInfo implements Parcelable { CharSequence carrierName, int nameSource, int iconTint, String number, int roaming, Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded, @Nullable UiccAccessRule[] accessRules, String cardString, boolean isOpportunistic, - @Nullable String groupUUID, boolean isMetered, int carrierId) { + @Nullable String groupUUID, boolean isMetered, int carrierId, int profileClass) { this(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, roaming, icon, mcc, mnc, countryIso, isEmbedded, accessRules, cardString, -1, - isOpportunistic, groupUUID, isMetered, false, carrierId); + isOpportunistic, groupUUID, isMetered, false, carrierId, profileClass); } /** @@ -206,7 +217,7 @@ public class SubscriptionInfo implements Parcelable { Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded, @Nullable UiccAccessRule[] accessRules, String cardString, int cardId, boolean isOpportunistic, @Nullable String groupUUID, boolean isMetered, - boolean isGroupDisabled, int carrierid) { + boolean isGroupDisabled, int carrierid, int profileClass) { this.mId = id; this.mIccId = iccId; this.mSimSlotIndex = simSlotIndex; @@ -229,6 +240,7 @@ public class SubscriptionInfo implements Parcelable { this.mIsMetered = isMetered; this.mIsGroupDisabled = isGroupDisabled; this.mCarrierId = carrierid; + this.mProfileClass = profileClass; } @@ -465,6 +477,15 @@ public class SubscriptionInfo implements Parcelable { return mIsMetered; } + /** + * @return the profile class of this subscription. + * @hide + */ + @SystemApi + public @SubscriptionManager.ProfileClass int getProfileClass() { + return this.mProfileClass; + } + /** * Checks whether the app with the given context is authorized to manage this subscription * according to its metadata. Only supported for embedded subscriptions (if {@link #isEmbedded} @@ -589,11 +610,12 @@ public class SubscriptionInfo implements Parcelable { boolean isMetered = source.readBoolean(); boolean isGroupDisabled = source.readBoolean(); int carrierid = source.readInt(); + int profileClass = source.readInt(); return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso, isEmbedded, accessRules, cardString, cardId, isOpportunistic, groupUUID, - isMetered, isGroupDisabled, carrierid); + isMetered, isGroupDisabled, carrierid, profileClass); } @Override @@ -626,6 +648,7 @@ public class SubscriptionInfo implements Parcelable { dest.writeBoolean(mIsMetered); dest.writeBoolean(mIsGroupDisabled); dest.writeInt(mCarrierId); + dest.writeInt(mProfileClass); } @Override @@ -661,7 +684,8 @@ public class SubscriptionInfo implements Parcelable { + " accessRules " + Arrays.toString(mAccessRules) + " cardString=" + cardStringToPrint + " cardId=" + mCardId + " isOpportunistic " + mIsOpportunistic + " mGroupUUID=" + mGroupUUID - + " isMetered=" + mIsMetered + " mIsGroupDisabled=" + mIsGroupDisabled + "}"; + + " isMetered=" + mIsMetered + " mIsGroupDisabled=" + mIsGroupDisabled + + " profileClass=" + mProfileClass + "}"; } @Override @@ -669,7 +693,7 @@ public class SubscriptionInfo implements Parcelable { return Objects.hash(mId, mSimSlotIndex, mNameSource, mIconTint, mDataRoaming, mIsEmbedded, mIsOpportunistic, mGroupUUID, mIsMetered, mIccId, mNumber, mMcc, mMnc, mCountryIso, mCardString, mCardId, mDisplayName, mCarrierName, mAccessRules, - mIsGroupDisabled, mCarrierId); + mIsGroupDisabled, mCarrierId, mProfileClass); } @Override @@ -704,6 +728,7 @@ public class SubscriptionInfo implements Parcelable { && Objects.equals(mCardId, toCompare.mCardId) && TextUtils.equals(mDisplayName, toCompare.mDisplayName) && TextUtils.equals(mCarrierName, toCompare.mCarrierName) - && Arrays.equals(mAccessRules, toCompare.mAccessRules); + && Arrays.equals(mAccessRules, toCompare.mAccessRules) + && mProfileClass == toCompare.mProfileClass; } } diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 3235507d76cd1..fae5d30f17b13 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -22,6 +22,7 @@ import static android.net.NetworkPolicyManager.OVERRIDE_UNMETERED; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.DurationMillisLong; +import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; @@ -62,6 +63,8 @@ import com.android.internal.telephony.ISub; import com.android.internal.telephony.ITelephonyRegistry; import com.android.internal.telephony.PhoneConstants; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -602,6 +605,72 @@ public class SubscriptionManager { */ public static final String IS_METERED = "is_metered"; + /** + * TelephonyProvider column name for the profile class of a subscription + * Only present if {@link #IS_EMBEDDED} is 1. + *

Type: INTEGER (int)

+ * @hide + */ + public static final String PROFILE_CLASS = "profile_class"; + + /** + * Profile class of the subscription + * @hide + */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = { "PROFILE_CLASS_" }, value = { + PROFILE_CLASS_TESTING, + PROFILE_CLASS_PROVISIONING, + PROFILE_CLASS_OPERATIONAL, + PROFILE_CLASS_UNSET, + PROFILE_CLASS_DEFAULT + }) + public @interface ProfileClass {} + + /** + * A testing profile can be pre-loaded or downloaded onto + * the eUICC and provides connectivity to test equipment + * for the purpose of testing the device and the eUICC. It + * is not intended to store any operator credentials. + * @hide + */ + @SystemApi + public static final int PROFILE_CLASS_TESTING = 0; + + /** + * A provisioning profile is pre-loaded onto the eUICC and + * provides connectivity to a mobile network solely for the + * purpose of provisioning profiles. + * @hide + */ + @SystemApi + public static final int PROFILE_CLASS_PROVISIONING = 1; + + /** + * An operational profile can be pre-loaded or downloaded + * onto the eUICC and provides services provided by the + * operator. + * @hide + */ + @SystemApi + public static final int PROFILE_CLASS_OPERATIONAL = 2; + + /** + * The profile class is unset. This occurs when profile class + * info is not available. The subscription either has no profile + * metadata or the profile metadata did not encode profile class. + * @hide + */ + @SystemApi + public static final int PROFILE_CLASS_UNSET = -1; + + /** + * Default profile class + * @hide + */ + @SystemApi + public static final int PROFILE_CLASS_DEFAULT = PROFILE_CLASS_UNSET; + /** * Broadcast Action: The user has changed one of the default subs related to * data, phone calls, or sms