Merge "support parent carrier id"
am: 00496a1181
Change-Id: Ifdb44efdfbeecd6db8841c6de3f38e40a7e9566b
This commit is contained in:
@@ -3496,6 +3496,27 @@ public final class Telephony {
|
||||
String.valueOf(subscriptionId)).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a content {@link Uri} used to receive updates on precise carrier identity
|
||||
* change on the given subscriptionId
|
||||
* {@link TelephonyManager#ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED}.
|
||||
* <p>
|
||||
* Use this {@link Uri} with a {@link ContentObserver} to be notified of changes to the
|
||||
* precise carrier identity {@link TelephonyManager#getSimPreciseCarrierId()}
|
||||
* while your app is running. You can also use a {@link JobService} to ensure your app
|
||||
* is notified of changes to the {@link Uri} even when it is not running.
|
||||
* Note, however, that using a {@link JobService} does not guarantee timely delivery of
|
||||
* updates to the {@link Uri}.
|
||||
*
|
||||
* @param subscriptionId the subscriptionId to receive updates on
|
||||
* @return the Uri used to observe precise carrier identity changes
|
||||
* @hide
|
||||
*/
|
||||
public static Uri getPreciseCarrierIdUriForSubscriptionId(int subscriptionId) {
|
||||
return Uri.withAppendedPath(Uri.withAppendedPath(CONTENT_URI, "precise"),
|
||||
String.valueOf(subscriptionId));
|
||||
}
|
||||
|
||||
/**
|
||||
* A user facing carrier name.
|
||||
* @see TelephonyManager#getSimCarrierIdName()
|
||||
@@ -3510,6 +3531,35 @@ public final class Telephony {
|
||||
*/
|
||||
public static final String CARRIER_ID = "carrier_id";
|
||||
|
||||
/**
|
||||
* A user facing carrier name for precise carrier id.
|
||||
* @see TelephonyManager#getSimPreciseCarrierIdName()
|
||||
* This is not a database column, only used to notify content observers for
|
||||
* {@link #getPreciseCarrierIdUriForSubscriptionId(int)}
|
||||
* @hide
|
||||
*/
|
||||
public static final String PRECISE_CARRIER_ID_NAME = "precise_carrier_id_name";
|
||||
|
||||
/**
|
||||
* A fine-grained carrier id.
|
||||
* @see TelephonyManager#getSimPreciseCarrierId()
|
||||
* This is not a database column, only used to notify content observers for
|
||||
* {@link #getPreciseCarrierIdUriForSubscriptionId(int)}
|
||||
* @hide
|
||||
*/
|
||||
public static final String PRECISE_CARRIER_ID = "precise_carrier_id";
|
||||
|
||||
/**
|
||||
* A unique parent carrier id. The parent-child
|
||||
* relationship can be used to further differentiate a single carrier by different networks,
|
||||
* by prepaid v.s. postpaid or even by 4G v.s. 3G plan. It's an optional field.
|
||||
* A carrier id with a valid parent_carrier_id is considered fine-grained carrier id, will
|
||||
* not be returned as {@link #CARRIER_ID} but {@link #PRECISE_CARRIER_ID}.
|
||||
* <P>Type: INTEGER </P>
|
||||
* @hide
|
||||
*/
|
||||
public static final String PARENT_CARRIER_ID = "parent_carrier_id";
|
||||
|
||||
/**
|
||||
* A unique mno carrier id. mno carrier shares the same {@link All#MCCMNC} as carrier id
|
||||
* and can be solely identified by {@link All#MCCMNC} only. If there is no such mno
|
||||
|
||||
@@ -1211,6 +1211,33 @@ public class TelephonyManager {
|
||||
public static final String ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED =
|
||||
"android.telephony.action.SUBSCRIPTION_CARRIER_IDENTITY_CHANGED";
|
||||
|
||||
/**
|
||||
* Broadcast Action: The subscription precise carrier identity has changed.
|
||||
* Similar like {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED}, this intent will be sent
|
||||
* on the event of {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED}. However, its possible
|
||||
* that precise carrier identity changes while
|
||||
* {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED} remains the same e.g, the same
|
||||
* subscription switches to different IMSI could potentially change its precise carrier id.
|
||||
*
|
||||
* The intent will have the following extra values:
|
||||
* <ul>
|
||||
* <li>{@link #EXTRA_PRECISE_CARRIER_ID} The up-to-date precise carrier id of the
|
||||
* current subscription.
|
||||
* </li>
|
||||
* <li>{@link #EXTRA_PRECISE_CARRIER_NAME} The up-to-date carrier name of the current
|
||||
* subscription.
|
||||
* </li>
|
||||
* <li>{@link #EXTRA_SUBSCRIPTION_ID} The subscription id associated with the changed carrier
|
||||
* identity.
|
||||
* </li>
|
||||
* </ul>
|
||||
* <p class="note">This is a protected intent that can only be sent by the system.
|
||||
* @hide
|
||||
*/
|
||||
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
|
||||
public static final String ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED =
|
||||
"android.telephony.action.SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED";
|
||||
|
||||
/**
|
||||
* An int extra used with {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED} which indicates
|
||||
* the updated carrier id {@link TelephonyManager#getSimCarrierId()} of
|
||||
@@ -1239,6 +1266,28 @@ public class TelephonyManager {
|
||||
*/
|
||||
public static final String EXTRA_CARRIER_NAME = "android.telephony.extra.CARRIER_NAME";
|
||||
|
||||
/**
|
||||
* An int extra used with {@link #ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED} which
|
||||
* indicates the updated precise carrier id {@link TelephonyManager#getSimPreciseCarrierId()} of
|
||||
* the current subscription. Note, its possible precise carrier id changes while
|
||||
* {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED} remains the same e.g, when
|
||||
* subscription switch to different IMSI.
|
||||
* <p>Will be {@link TelephonyManager#UNKNOWN_CARRIER_ID} if the subscription is unavailable or
|
||||
* the carrier cannot be identified.
|
||||
* @hide
|
||||
*/
|
||||
public static final String EXTRA_PRECISE_CARRIER_ID =
|
||||
"android.telephony.extra.PRECISE_CARRIER_ID";
|
||||
|
||||
/**
|
||||
* An string extra used with {@link #ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED} which
|
||||
* indicates the updated precise carrier name of the current subscription.
|
||||
* {@see TelephonyManager#getSimPreciseCarrierIdName()}
|
||||
* <p>it's a user-facing name of the precise carrier id {@link #EXTRA_PRECISE_CARRIER_ID},
|
||||
* @hide
|
||||
*/
|
||||
public static final String EXTRA_PRECISE_CARRIER_NAME = "android.telephony.extra.CARRIER_NAME";
|
||||
|
||||
/**
|
||||
* An int extra used with {@link #ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED} to indicate the
|
||||
* subscription which has changed.
|
||||
@@ -8298,6 +8347,62 @@ public class TelephonyManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns fine-grained carrier id of the current subscription.
|
||||
*
|
||||
* <p>The precise carrier id can be used to further differentiate a carrier by different
|
||||
* networks, by prepaid v.s.postpaid or even by 4G v.s.3G plan. Each carrier has a unique
|
||||
* carrier id {@link #getSimCarrierId()} but can have multiple precise carrier id. e.g,
|
||||
* {@link #getSimCarrierId()} will always return Tracfone (id 2022) for a Tracfone SIM, while
|
||||
* {@link #getSimPreciseCarrierId()} can return Tracfone AT&T or Tracfone T-Mobile based on the
|
||||
* current subscription IMSI.
|
||||
*
|
||||
* <p>For carriers without any fine-grained carrier ids, return {@link #getSimCarrierId()}
|
||||
* <p>Precise carrier ids are defined in the same way as carrier id
|
||||
* <a href="https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/master/assets/carrier_list.textpb">here</a>
|
||||
* except each with a "parent" id linking to its top-level carrier id.
|
||||
*
|
||||
* @return Returns fine-grained carrier id of the current subscription.
|
||||
* Return {@link #UNKNOWN_CARRIER_ID} if the subscription is unavailable or the carrier cannot
|
||||
* be identified.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public int getSimPreciseCarrierId() {
|
||||
try {
|
||||
ITelephony service = getITelephony();
|
||||
if (service != null) {
|
||||
return service.getSubscriptionPreciseCarrierId(getSubId());
|
||||
}
|
||||
} catch (RemoteException ex) {
|
||||
// This could happen if binder process crashes.
|
||||
}
|
||||
return UNKNOWN_CARRIER_ID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Similar like {@link #getSimCarrierIdName()}, returns user-facing name of the
|
||||
* precise carrier id {@link #getSimPreciseCarrierId()}
|
||||
*
|
||||
* <p>The returned name is unlocalized.
|
||||
*
|
||||
* @return user-facing name of the subscription precise carrier id. Return {@code null} if the
|
||||
* subscription is unavailable or the carrier cannot be identified.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public CharSequence getSimPreciseCarrierIdName() {
|
||||
try {
|
||||
ITelephony service = getITelephony();
|
||||
if (service != null) {
|
||||
return service.getSubscriptionPreciseCarrierName(getSubId());
|
||||
}
|
||||
} catch (RemoteException ex) {
|
||||
// This could happen if binder process crashes.
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of certs in hex string from loaded carrier privileges access rules.
|
||||
*
|
||||
|
||||
@@ -1322,6 +1322,37 @@ interface ITelephony {
|
||||
*/
|
||||
int getSubscriptionMNOCarrierId(int subId);
|
||||
|
||||
/**
|
||||
* Returns fine-grained carrier id of the current subscription.
|
||||
*
|
||||
* <p>The precise carrier id can be used to further differentiate a carrier by different
|
||||
* networks, by prepaid v.s.postpaid or even by 4G v.s.3G plan. Each carrier has a unique
|
||||
* carrier id {@link #getSimCarrierId()} but can have multiple precise carrier id. e.g,
|
||||
* {@link #getSimCarrierId()} will always return Tracfone (id 2022) for a Tracfone SIM, while
|
||||
* {@link #getSimPreciseCarrierId()} can return Tracfone AT&T or Tracfone T-Mobile based on the
|
||||
* current underlying network.
|
||||
*
|
||||
* <p>For carriers without any fine-grained carrier ids, return {@link #getSimCarrierId()}
|
||||
*
|
||||
* @return Returns fine-grained carrier id of the current subscription.
|
||||
* Return {@link #UNKNOWN_CARRIER_ID} if the subscription is unavailable or the carrier cannot
|
||||
* be identified.
|
||||
* @hide
|
||||
*/
|
||||
int getSubscriptionPreciseCarrierId(int subId);
|
||||
|
||||
/**
|
||||
* Similar like {@link #getSimCarrierIdName()}, returns user-facing name of the
|
||||
* precise carrier id {@link #getSimPreciseCarrierId()}
|
||||
*
|
||||
* <p>The returned name is unlocalized.
|
||||
*
|
||||
* @return user-facing name of the subscription precise carrier id. Return {@code null} if the
|
||||
* subscription is unavailable or the carrier cannot be identified.
|
||||
* @hide
|
||||
*/
|
||||
String getSubscriptionPreciseCarrierName(int subId);
|
||||
|
||||
/**
|
||||
* Action set from carrier signalling broadcast receivers to enable/disable metered apns
|
||||
* Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required
|
||||
|
||||
Reference in New Issue
Block a user