Merge "Remove parentSubId and define API to set groupSubId"

am: d413b5c713

Change-Id: I714ef99b6b6ec2cbf39264eaca6f83142b743f6e
This commit is contained in:
Xiangyu/Malcolm Chen
2018-11-26 17:07:26 -08:00
committed by android-build-merger
4 changed files with 77 additions and 35 deletions

View File

@@ -42811,6 +42811,7 @@ package android.telephony {
method public java.lang.String getCountryIso();
method public int getDataRoaming();
method public java.lang.CharSequence getDisplayName();
method public java.lang.String getGroupUuid();
method public java.lang.String getIccId();
method public int getIconTint();
method public deprecated int getMcc();
@@ -42818,7 +42819,6 @@ package android.telephony {
method public deprecated int getMnc();
method public java.lang.String getMncString();
method public java.lang.String getNumber();
method public int getParentSubId();
method public int getSimSlotIndex();
method public int getSubscriptionId();
method public boolean isEmbedded();
@@ -42852,6 +42852,7 @@ package android.telephony {
method public static boolean isValidSubscriptionId(int);
method public void removeOnOpportunisticSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener);
method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
method public java.lang.String setSubscriptionGroup(int[]);
method public void setSubscriptionOverrideCongested(int, boolean, long);
method public void setSubscriptionOverrideUnmetered(int, boolean, long);
method public void setSubscriptionPlans(int, java.util.List<android.telephony.SubscriptionPlan>);

View File

@@ -143,9 +143,11 @@ public class SubscriptionInfo implements Parcelable {
private boolean mIsOpportunistic;
/**
* SubId of the parent subscription, if there is one.
* A UUID assigned to the subscription group. It returns
* null if not assigned.
*/
private int mParentSubId;
@Nullable
private String mGroupUUID;
/**
* @hide
@@ -156,7 +158,7 @@ public class SubscriptionInfo implements Parcelable {
@Nullable UiccAccessRule[] accessRules, String cardId) {
this(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number,
roaming, icon, mcc, mnc, countryIso, isEmbedded, accessRules, cardId,
false, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
false, null);
}
/**
@@ -166,7 +168,7 @@ 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 cardId, boolean isOpportunistic,
int parentSubId) {
@Nullable String groupUUID) {
this.mId = id;
this.mIccId = iccId;
this.mSimSlotIndex = simSlotIndex;
@@ -184,7 +186,7 @@ public class SubscriptionInfo implements Parcelable {
this.mAccessRules = accessRules;
this.mCardId = cardId;
this.mIsOpportunistic = isOpportunistic;
this.mParentSubId = parentSubId;
this.mGroupUUID = groupUUID;
}
/**
@@ -388,16 +390,16 @@ public class SubscriptionInfo implements Parcelable {
}
/**
* Used in scenarios where a child subscription is bundled with a primary parent subscription.
* The child subscription will typically be opportunistic (see {@link #isOpportunistic()})
* and will be used to provide data services where available, with the parent being the primary
* fallback subscription.
* Used in scenarios where different subscriptions are bundled as a group.
* It's typically a primary and an opportunistic subscription. (see {@link #isOpportunistic()})
* Such that those subscriptions will have some affiliated behaviors such as opportunistic
* subscription may be invisible to the user.
*
* @return subId of parent subscription if its bundled with a primary subscription.
* If there isn't one, {@link SubscriptionManager#INVALID_SUBSCRIPTION_ID}
* @return group UUID a String of group UUID if it belongs to a group. Otherwise
* it will return null.
*/
public int getParentSubId() {
return mParentSubId;
public String getGroupUuid() {
return mGroupUUID;
}
/**
@@ -493,11 +495,11 @@ public class SubscriptionInfo implements Parcelable {
UiccAccessRule[] accessRules = source.createTypedArray(UiccAccessRule.CREATOR);
String cardId = source.readString();
boolean isOpportunistic = source.readBoolean();
int parentSubId = source.readInt();
String groupUUID = source.readString();
return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName,
nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso,
isEmbedded, accessRules, cardId, isOpportunistic, parentSubId);
isEmbedded, accessRules, cardId, isOpportunistic, groupUUID);
}
@Override
@@ -525,7 +527,7 @@ public class SubscriptionInfo implements Parcelable {
dest.writeTypedArray(mAccessRules, flags);
dest.writeString(mCardId);
dest.writeBoolean(mIsOpportunistic);
dest.writeInt(mParentSubId);
dest.writeString(mGroupUUID);
}
@Override
@@ -559,13 +561,13 @@ public class SubscriptionInfo implements Parcelable {
+ " mnc " + mMnc + "mCountryIso=" + mCountryIso + " isEmbedded " + mIsEmbedded
+ " accessRules " + Arrays.toString(mAccessRules)
+ " cardId=" + cardIdToPrint + " isOpportunistic " + mIsOpportunistic
+ " parentSubId=" + mParentSubId + "}";
+ " mGroupUUID=" + mGroupUUID + "}";
}
@Override
public int hashCode() {
return Objects.hash(mId, mSimSlotIndex, mNameSource, mIconTint, mDataRoaming, mIsEmbedded,
mIsOpportunistic, mParentSubId, mIccId, mNumber, mMcc, mMnc, mCountryIso,
mIsOpportunistic, mGroupUUID, mIccId, mNumber, mMcc, mMnc, mCountryIso,
mCardId, mDisplayName, mCarrierName, mAccessRules);
}
@@ -588,7 +590,7 @@ public class SubscriptionInfo implements Parcelable {
&& mDataRoaming == toCompare.mDataRoaming
&& mIsEmbedded == toCompare.mIsEmbedded
&& mIsOpportunistic == toCompare.mIsOpportunistic
&& mParentSubId == toCompare.mParentSubId
&& Objects.equals(mGroupUUID, toCompare.mGroupUUID)
&& Objects.equals(mIccId, toCompare.mIccId)
&& Objects.equals(mNumber, toCompare.mNumber)
&& Objects.equals(mMcc, toCompare.mMcc)

View File

@@ -118,7 +118,6 @@ public class SubscriptionManager {
@UnsupportedAppUsage
public static final Uri CONTENT_URI = Uri.parse("content://telephony/siminfo");
/**
* Generates a content {@link Uri} used to receive updates on simInfo change
* on the given subscriptionId
@@ -575,6 +574,15 @@ public class SubscriptionManager {
*/
public static final String PARENT_SUB_ID = "parent_sub_id";
/**
* TelephonyProvider column name for group ID. Subscriptions with same group ID
* are considered bundled together, and should behave as a single subscription at
* certain scenarios.
*
* @hide
*/
public static final String GROUP_UUID = "group_uuid";
/**
* Broadcast Action: The user has changed one of the default subs related to
* data, phone calls, or sms</p>
@@ -2355,19 +2363,40 @@ public class SubscriptionManager {
}
/**
* Set parent subId by simInfo index
* Inform SubscriptionManager that subscriptions in the list are bundled
* as a group. Typically it's a primary subscription and an opportunistic
* subscription. It should only affect multi-SIM scenarios where primary
* and opportunistic subscriptions can be activated together.
* Being in the same group means they might be activated or deactivated
* together, some of them may be invisible to the users, etc.
*
* @param parentSubId subId of its parent subscription.
* @param subId the unique SubscriptionInfo index in database
* @return the number of records updated
* @hide
* Caller will either have {@link android.Manifest.permission.MODIFY_PHONE_STATE}
* permission or can manage all subscriptions in the list, according to their
* acess rules.
*
* @param subIdList list of subId that will be in the same group
* @return groupUUID a UUID assigned to the subscription group. It returns
* null if fails.
*
*/
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
public int setParentSubId(int parentSubId, int subId) {
if (VDBG) logd("[setParentSubId]+ parentSubId:" + parentSubId + " subId:" + subId);
return setSubscriptionPropertyHelper(subId, "parentSubId",
(iSub)-> iSub.setParentSubId(parentSubId, subId));
public String setSubscriptionGroup(int[] subIdList) {
String pkgForDebug = mContext != null ? mContext.getOpPackageName() : "<unknown>";
if (VDBG) {
logd("[setSubscriptionGroup]+ subIdList:" + Arrays.toString(subIdList));
}
String groupUUID = null;
try {
ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
if (iSub != null) {
groupUUID = iSub.setSubscriptionGroup(subIdList, pkgForDebug);
}
} catch (RemoteException ex) {
// ignore it
}
return groupUUID;
}
private interface CallISubMethodHelper {

View File

@@ -165,13 +165,23 @@ interface ISub {
int setOpportunistic(boolean opportunistic, int subId);
/**
* Set parent subId by simInfo index
* Inform SubscriptionManager that subscriptions in the list are bundled
* as a group. Typically it's a primary subscription and an opportunistic
* subscription. It should only affect multi-SIM scenarios where primary
* and opportunistic subscriptions can be activated together.
* Being in the same group means they might be activated or deactivated
* together, some of them may be invisible to the users, etc.
*
* Caller will either have {@link android.Manifest.permission.MODIFY_PHONE_STATE}
* permission or can manage all subscriptions in the list, according to their
* acess rules.
*
* @param subIdList list of subId that will be in the same group
* @return groupUUID a UUID assigned to the subscription group. It returns
* null if fails.
*
* @param parentSubId: subId of its parent subscription.
* @param subId the unique SubscriptionInfo index in database
* @return the number of records updated
*/
int setParentSubId(int parentSubId, int subId);
String setSubscriptionGroup(in int[] subIdList, String callingPackage);
/**
* Set which subscription is preferred for cellular data. It's