diff --git a/api/system-current.txt b/api/system-current.txt index 5640eafcee1f4..f5907efcf6d8c 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -10582,6 +10582,7 @@ package android.content.pm { field public static final java.lang.String FEATURE_SIP = "android.software.sip"; field public static final java.lang.String FEATURE_SIP_VOIP = "android.software.sip.voip"; field public static final java.lang.String FEATURE_TELEPHONY = "android.hardware.telephony"; + field public static final java.lang.String FEATURE_TELEPHONY_CARRIERLOCK = "android.hardware.telephony.carrierlock"; field public static final java.lang.String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma"; field public static final java.lang.String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm"; field public static final deprecated java.lang.String FEATURE_TELEVISION = "android.hardware.type.television"; @@ -41376,6 +41377,7 @@ package android.telephony { method public void enableVideoCalling(boolean); method public boolean endCall(); method public java.util.List getAllCellInfo(); + method public java.util.List getAllowedCarriers(int); method public int getCallState(); method public android.os.PersistableBundle getCarrierConfig(); method public java.util.List getCarrierPackageNamesForIntent(android.content.Intent); @@ -41451,6 +41453,7 @@ package android.telephony { method public java.lang.String sendEnvelopeWithStatus(java.lang.String); method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.OnReceiveUssdResponseCallback, android.os.Handler); method public void sendUssdRequest(java.lang.String, int, android.telephony.TelephonyManager.OnReceiveUssdResponseCallback, android.os.Handler); + method public int setAllowedCarriers(int, java.util.List); method public void setDataEnabled(boolean); method public void setDataEnabled(int, boolean); method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 04e649cba0923..9111e68433255 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -1853,6 +1853,20 @@ public abstract class PackageManager { @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm"; + /** + * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: + * The device supports telephony carrier restriction mechanism. + * + *

Devices declaring this feature must have an implementation of the + * {@link android.telephony.TelephonyManager#getAllowedCarriers} and + * {@link android.telephony.TelephonyManager#setAllowedCarriers}. + * @hide + */ + @SystemApi + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_TELEPHONY_CARRIERLOCK = + "android.hardware.telephony.carrierlock"; + /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports connecting to USB devices diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index eb838fa7e8c1d..a3f7c18f54bd3 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -5809,10 +5809,17 @@ public class TelephonyManager { * Set the allowed carrier list for slotId * Require system privileges. In the future we may add this to carrier APIs. * + *

Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE} + * + *

This method works only on devices with {@link + * android.content.pm.PackageManager#FEATURE_TELEPHONY_CARRIERLOCK} enabled. + * * @return The number of carriers set successfully. Should be length of * carrierList on success; -1 on error. * @hide */ + @SystemApi public int setAllowedCarriers(int slotId, List carriers) { try { ITelephony service = getITelephony(); @@ -5821,6 +5828,8 @@ public class TelephonyManager { } } catch (RemoteException e) { Log.e(TAG, "Error calling ITelephony#setAllowedCarriers", e); + } catch (NullPointerException e) { + Log.e(TAG, "Error calling ITelephony#setAllowedCarriers", e); } return -1; } @@ -5829,10 +5838,17 @@ public class TelephonyManager { * Get the allowed carrier list for slotId. * Require system privileges. In the future we may add this to carrier APIs. * + *

Requires Permission: + * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE} + * + *

This method returns valid data on devices with {@link + * android.content.pm.PackageManager#FEATURE_TELEPHONY_CARRIERLOCK} enabled. + * * @return List of {@link android.telephony.CarrierIdentifier}; empty list * means all carriers are allowed. * @hide */ + @SystemApi public List getAllowedCarriers(int slotId) { try { ITelephony service = getITelephony(); @@ -5841,6 +5857,8 @@ public class TelephonyManager { } } catch (RemoteException e) { Log.e(TAG, "Error calling ITelephony#getAllowedCarriers", e); + } catch (NullPointerException e) { + Log.e(TAG, "Error calling ITelephony#setAllowedCarriers", e); } return new ArrayList(0); }