Loading core/java/android/service/carrier/CarrierIdentifier.java +64 −18 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.service.carrier; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; import android.telephony.TelephonyManager; import com.android.internal.telephony.uicc.IccUtils; Loading @@ -26,7 +27,10 @@ import java.util.Objects; /** * Used to pass info to CarrierConfigService implementations so they can decide what values to * return. * return. Instead of passing mcc, mnc, gid1, gid2, spn, imsi to locate carrier information, * CarrierIdentifier also include carrier id {@link TelephonyManager#getSimCarrierId()}, * a platform-wide unique identifier for each carrier. CarrierConfigService can directly use * carrier id as the key to look up the carrier info. */ public class CarrierIdentifier implements Parcelable { Loading @@ -49,15 +53,40 @@ public class CarrierIdentifier implements Parcelable { private @Nullable String mImsi; private @Nullable String mGid1; private @Nullable String mGid2; private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID; private int mPreciseCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID; public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, @Nullable String imsi, @Nullable String gid1, @Nullable String gid2) { this(mcc, mnc, spn, imsi, gid1, gid2, TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID); } /** * @param mcc mobile country code * @param mnc mobile network code * @param spn service provider name * @param imsi International Mobile Subscriber Identity {@link TelephonyManager#getSubscriberId()} * @param gid1 group id level 1 {@link TelephonyManager#getGroupIdLevel1()} * @param gid2 group id level 2 * @param carrierid carrier unique identifier {@link TelephonyManager#getSimCarrierId()}, used * to uniquely identify the carrier and look up the carrier configurations. * @param preciseCarrierId precise carrier identifier {@link TelephonyManager#getSimPreciseCarrierId()} * @hide * * TODO: expose this to public API */ public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, @Nullable String imsi, @Nullable String gid1, @Nullable String gid2, int carrierid, int preciseCarrierId) { mMcc = mcc; mMnc = mnc; mSpn = spn; mImsi = imsi; mGid1 = gid1; mGid2 = gid2; mCarrierId = carrierid; mPreciseCarrierId = preciseCarrierId; } /** Loading Loading @@ -125,6 +154,22 @@ public class CarrierIdentifier implements Parcelable { return mGid2; } /** * Get the carrier id {@link TelephonyManager#getSimCarrierId() } * @hide */ public int getCarrierId() { return mCarrierId; } /** * Get the precise carrier id {@link TelephonyManager#getSimPreciseCarrierId()} * @hide */ public int getPreciseCarrierId() { return mPreciseCarrierId; } @Override public boolean equals(Object obj) { if (this == obj) { Loading @@ -140,19 +185,14 @@ public class CarrierIdentifier implements Parcelable { && Objects.equals(mSpn, that.mSpn) && Objects.equals(mImsi, that.mImsi) && Objects.equals(mGid1, that.mGid1) && Objects.equals(mGid2, that.mGid2); && Objects.equals(mGid2, that.mGid2) && Objects.equals(mCarrierId, that.mCarrierId) && Objects.equals(mPreciseCarrierId, that.mPreciseCarrierId); } @Override public int hashCode(){ int result = 1; result = 31 * result + Objects.hashCode(mMcc); result = 31 * result + Objects.hashCode(mMnc); result = 31 * result + Objects.hashCode(mSpn); result = 31 * result + Objects.hashCode(mImsi); result = 31 * result + Objects.hashCode(mGid1); result = 31 * result + Objects.hashCode(mGid2); return result; return Objects.hash(mMcc, mMnc, mSpn, mImsi, mGid1, mGid2, mCarrierId, mPreciseCarrierId); } @Override Loading @@ -168,6 +208,8 @@ public class CarrierIdentifier implements Parcelable { out.writeString(mImsi); out.writeString(mGid1); out.writeString(mGid2); out.writeInt(mCarrierId); out.writeInt(mPreciseCarrierId); } @Override Loading @@ -179,6 +221,8 @@ public class CarrierIdentifier implements Parcelable { + ",imsi=" + mImsi + ",gid1=" + mGid1 + ",gid2=" + mGid2 + ",carrierid=" + mCarrierId + ",mPreciseCarrierId=" + mPreciseCarrierId + "}"; } Loading @@ -190,6 +234,8 @@ public class CarrierIdentifier implements Parcelable { mImsi = in.readString(); mGid1 = in.readString(); mGid2 = in.readString(); mCarrierId = in.readInt(); mPreciseCarrierId = in.readInt(); } /** @hide */ Loading core/java/android/service/carrier/CarrierService.java +5 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,11 @@ public abstract class CarrierService extends Service { * </p> * * @param id contains details about the current carrier that can be used do decide what * configuration values to return. * configuration values to return. Instead of using details like MCCMNC to decide * current carrier, it also contains subscription carrier id * {@link android.telephony.TelephonyManager#getSimCarrierId()}, a platform-wide * unique identifier for each carrier, CarrierConfigService can directly use carrier * id as the key to look up the carrier info. * @return a {@link PersistableBundle} object containing the configuration or null if default * values should be used. */ Loading telephony/java/android/telephony/TelephonyManager.java +20 −0 Original line number Diff line number Diff line Loading @@ -8536,6 +8536,26 @@ public class TelephonyManager { return UNKNOWN_CARRIER_ID; } /** * Returns carrier id based on MCCMNC only. This is for fallback when exact carrier id * {@link #getSimCarrierId()} configurations are not found * * @return matching carrier id from passing mccmnc. * @hide */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCarrierIdFromMccMnc(String mccmnc) { try { ITelephony service = getITelephony(); if (service != null) { return service.getCarrierIdFromMccMnc(getSlotIndex(), mccmnc); } } catch (RemoteException ex) { // This could happen if binder process crashes. } return UNKNOWN_CARRIER_ID; } /** * Return the application ID for the uicc application type like {@link #APPTYPE_CSIM}. * All uicc applications are uniquely identified by application ID. See ETSI 102.221 and 101.220 Loading telephony/java/com/android/internal/telephony/ITelephony.aidl +9 −0 Original line number Diff line number Diff line Loading @@ -1371,6 +1371,15 @@ interface ITelephony { */ String getSubscriptionPreciseCarrierName(int subId); /** * Returns carrier id based on MCCMNC only. This will return a MNO carrier id used for fallback * check when exact carrier id {@link #getSimCarrierId()} configurations are not found * * @return carrier id from passing mccmnc. * @hide */ int getCarrierIdFromMccMnc(int slotIndex, String mccmnc); /** * Action set from carrier signalling broadcast receivers to enable/disable metered apns * Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required Loading Loading
core/java/android/service/carrier/CarrierIdentifier.java +64 −18 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.service.carrier; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; import android.telephony.TelephonyManager; import com.android.internal.telephony.uicc.IccUtils; Loading @@ -26,7 +27,10 @@ import java.util.Objects; /** * Used to pass info to CarrierConfigService implementations so they can decide what values to * return. * return. Instead of passing mcc, mnc, gid1, gid2, spn, imsi to locate carrier information, * CarrierIdentifier also include carrier id {@link TelephonyManager#getSimCarrierId()}, * a platform-wide unique identifier for each carrier. CarrierConfigService can directly use * carrier id as the key to look up the carrier info. */ public class CarrierIdentifier implements Parcelable { Loading @@ -49,15 +53,40 @@ public class CarrierIdentifier implements Parcelable { private @Nullable String mImsi; private @Nullable String mGid1; private @Nullable String mGid2; private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID; private int mPreciseCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID; public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, @Nullable String imsi, @Nullable String gid1, @Nullable String gid2) { this(mcc, mnc, spn, imsi, gid1, gid2, TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID); } /** * @param mcc mobile country code * @param mnc mobile network code * @param spn service provider name * @param imsi International Mobile Subscriber Identity {@link TelephonyManager#getSubscriberId()} * @param gid1 group id level 1 {@link TelephonyManager#getGroupIdLevel1()} * @param gid2 group id level 2 * @param carrierid carrier unique identifier {@link TelephonyManager#getSimCarrierId()}, used * to uniquely identify the carrier and look up the carrier configurations. * @param preciseCarrierId precise carrier identifier {@link TelephonyManager#getSimPreciseCarrierId()} * @hide * * TODO: expose this to public API */ public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, @Nullable String imsi, @Nullable String gid1, @Nullable String gid2, int carrierid, int preciseCarrierId) { mMcc = mcc; mMnc = mnc; mSpn = spn; mImsi = imsi; mGid1 = gid1; mGid2 = gid2; mCarrierId = carrierid; mPreciseCarrierId = preciseCarrierId; } /** Loading Loading @@ -125,6 +154,22 @@ public class CarrierIdentifier implements Parcelable { return mGid2; } /** * Get the carrier id {@link TelephonyManager#getSimCarrierId() } * @hide */ public int getCarrierId() { return mCarrierId; } /** * Get the precise carrier id {@link TelephonyManager#getSimPreciseCarrierId()} * @hide */ public int getPreciseCarrierId() { return mPreciseCarrierId; } @Override public boolean equals(Object obj) { if (this == obj) { Loading @@ -140,19 +185,14 @@ public class CarrierIdentifier implements Parcelable { && Objects.equals(mSpn, that.mSpn) && Objects.equals(mImsi, that.mImsi) && Objects.equals(mGid1, that.mGid1) && Objects.equals(mGid2, that.mGid2); && Objects.equals(mGid2, that.mGid2) && Objects.equals(mCarrierId, that.mCarrierId) && Objects.equals(mPreciseCarrierId, that.mPreciseCarrierId); } @Override public int hashCode(){ int result = 1; result = 31 * result + Objects.hashCode(mMcc); result = 31 * result + Objects.hashCode(mMnc); result = 31 * result + Objects.hashCode(mSpn); result = 31 * result + Objects.hashCode(mImsi); result = 31 * result + Objects.hashCode(mGid1); result = 31 * result + Objects.hashCode(mGid2); return result; return Objects.hash(mMcc, mMnc, mSpn, mImsi, mGid1, mGid2, mCarrierId, mPreciseCarrierId); } @Override Loading @@ -168,6 +208,8 @@ public class CarrierIdentifier implements Parcelable { out.writeString(mImsi); out.writeString(mGid1); out.writeString(mGid2); out.writeInt(mCarrierId); out.writeInt(mPreciseCarrierId); } @Override Loading @@ -179,6 +221,8 @@ public class CarrierIdentifier implements Parcelable { + ",imsi=" + mImsi + ",gid1=" + mGid1 + ",gid2=" + mGid2 + ",carrierid=" + mCarrierId + ",mPreciseCarrierId=" + mPreciseCarrierId + "}"; } Loading @@ -190,6 +234,8 @@ public class CarrierIdentifier implements Parcelable { mImsi = in.readString(); mGid1 = in.readString(); mGid2 = in.readString(); mCarrierId = in.readInt(); mPreciseCarrierId = in.readInt(); } /** @hide */ Loading
core/java/android/service/carrier/CarrierService.java +5 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,11 @@ public abstract class CarrierService extends Service { * </p> * * @param id contains details about the current carrier that can be used do decide what * configuration values to return. * configuration values to return. Instead of using details like MCCMNC to decide * current carrier, it also contains subscription carrier id * {@link android.telephony.TelephonyManager#getSimCarrierId()}, a platform-wide * unique identifier for each carrier, CarrierConfigService can directly use carrier * id as the key to look up the carrier info. * @return a {@link PersistableBundle} object containing the configuration or null if default * values should be used. */ Loading
telephony/java/android/telephony/TelephonyManager.java +20 −0 Original line number Diff line number Diff line Loading @@ -8536,6 +8536,26 @@ public class TelephonyManager { return UNKNOWN_CARRIER_ID; } /** * Returns carrier id based on MCCMNC only. This is for fallback when exact carrier id * {@link #getSimCarrierId()} configurations are not found * * @return matching carrier id from passing mccmnc. * @hide */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCarrierIdFromMccMnc(String mccmnc) { try { ITelephony service = getITelephony(); if (service != null) { return service.getCarrierIdFromMccMnc(getSlotIndex(), mccmnc); } } catch (RemoteException ex) { // This could happen if binder process crashes. } return UNKNOWN_CARRIER_ID; } /** * Return the application ID for the uicc application type like {@link #APPTYPE_CSIM}. * All uicc applications are uniquely identified by application ID. See ETSI 102.221 and 101.220 Loading
telephony/java/com/android/internal/telephony/ITelephony.aidl +9 −0 Original line number Diff line number Diff line Loading @@ -1371,6 +1371,15 @@ interface ITelephony { */ String getSubscriptionPreciseCarrierName(int subId); /** * Returns carrier id based on MCCMNC only. This will return a MNO carrier id used for fallback * check when exact carrier id {@link #getSimCarrierId()} configurations are not found * * @return carrier id from passing mccmnc. * @hide */ int getCarrierIdFromMccMnc(int slotIndex, String mccmnc); /** * Action set from carrier signalling broadcast receivers to enable/disable metered apns * Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required Loading