diff options
author | 2024-01-04 23:46:11 +0000 | |
---|---|---|
committer | 2024-01-04 23:46:11 +0000 | |
commit | 9de275a20bafd439fe44e62e01314bc77e98b9c7 (patch) | |
tree | 2cce2e554b1ddc5baca28698b4a7fc25797db2d3 | |
parent | 43387bfc34dff6001b8941964f074f3c359b9eaf (diff) | |
parent | f0a736627cd7548dddfd75f13e95ad8bfccc8b65 (diff) |
Merge "Enforce map the telephony features with APIs in TelephonyManager" into main
-rw-r--r-- | telephony/java/android/telephony/TelephonyManager.java | 834 |
1 files changed, 813 insertions, 21 deletions
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 9e292be7f767..1b47dfe0eba1 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -510,7 +510,7 @@ public class TelephonyManager { /** @hide */ @UnsupportedAppUsage public TelephonyManager(Context context) { - this(context, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID); + this(context, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID); } /** @hide */ @@ -2140,10 +2140,14 @@ public class TelephonyManager { * the IMEI/SV for GSM phones. Return null if the software version is * not available. * <p> + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. */ @RequiresPermission(anyOf = { android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_BASIC_PHONE_STATE}) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) @Nullable public String getDeviceSoftwareVersion() { return getDeviceSoftwareVersion(getSlotIndex()); @@ -2158,10 +2162,13 @@ public class TelephonyManager { * * @param slotIndex of which deviceID is returned * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) @Nullable public String getDeviceSoftwareVersion(int slotIndex) { ITelephony telephony = getITelephony(); @@ -2288,6 +2295,9 @@ public class TelephonyManager { * * See {@link #getImei(int)} for details on the required permissions and behavior * when the caller does not hold sufficient permissions. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_GSM}. */ @SuppressAutoDoc // No support for device / profile owner or carrier privileges (b/72967236). @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -2330,6 +2340,9 @@ public class TelephonyManager { * </ul> * * @param slotIndex of which IMEI is returned + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_GSM}. */ @SuppressAutoDoc // No support for device / profile owner or carrier privileges (b/72967236). @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -2350,6 +2363,9 @@ public class TelephonyManager { /** * Returns the Type Allocation Code from the IMEI. Return null if Type Allocation Code is not * available. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_GSM}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_GSM) @Nullable @@ -2362,6 +2378,9 @@ public class TelephonyManager { * available. * * @param slotIndex of which Type Allocation Code is returned + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_GSM}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_GSM) @Nullable @@ -2407,6 +2426,9 @@ public class TelephonyManager { * the READ_PHONE_STATE permission, or if the calling app is targeting API level 29 or * higher, then a SecurityException is thrown.</li> * </ul> + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. */ @SuppressAutoDoc // No support for device / profile owner or carrier privileges (b/72967236). @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -2446,6 +2468,9 @@ public class TelephonyManager { * </ul> * * @param slotIndex of which MEID is returned + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. */ @SuppressAutoDoc // No support for device / profile owner or carrier privileges (b/72967236). @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -2472,6 +2497,9 @@ public class TelephonyManager { /** * Returns the Manufacturer Code from the MEID. Return null if Manufacturer Code is not * available. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CDMA) @Nullable @@ -2484,6 +2512,9 @@ public class TelephonyManager { * available. * * @param slotIndex of which Type Allocation Code is returned + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CDMA) @Nullable @@ -2528,6 +2559,9 @@ public class TelephonyManager { * the READ_PHONE_STATE permission, or if the calling app is targeting API level 29 or * higher, then a SecurityException is thrown.</li> * </ul> + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // No support for device / profile owner or carrier privileges (b/72967236). @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -2563,10 +2597,14 @@ public class TelephonyManager { *<p> * @return Current location of the device or null if not available. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. + * * @deprecated use {@link #getAllCellInfo} instead, which returns a superset of this API. */ @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public CellLocation getCellLocation() { try { ITelephony telephony = getITelephony(); @@ -2596,12 +2634,15 @@ public class TelephonyManager { * * @return List of NeighboringCellInfo or null if info unavailable. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @removed * @deprecated Use {@link #getAllCellInfo} which returns a superset of the information * from NeighboringCellInfo, including LTE cell information. */ @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public List<NeighboringCellInfo> getNeighboringCellInfo() { try { ITelephony telephony = getITelephony(); @@ -2648,9 +2689,12 @@ public class TelephonyManager { * @see #PHONE_TYPE_CDMA * @see #PHONE_TYPE_SIP * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. * {@hide} */ @SystemApi + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) public int getCurrentPhoneType() { return getCurrentPhoneType(getSubId()); } @@ -2663,9 +2707,13 @@ public class TelephonyManager { * @see #PHONE_TYPE_CDMA * * @param subId for which phone type is returned + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. * @hide */ @SystemApi + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) public int getCurrentPhoneType(int subId) { int phoneId; if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { @@ -2712,7 +2760,11 @@ public class TelephonyManager { * @see #PHONE_TYPE_GSM * @see #PHONE_TYPE_CDMA * @see #PHONE_TYPE_SIP + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. */ + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) public int getPhoneType() { if (!isVoiceCapable()) { return PHONE_TYPE_NONE; @@ -2912,6 +2964,9 @@ public class TelephonyManager { * @see CarrierConfigManager#getConfigForSubId(int) * @see #createForSubscriptionId(int) * @see #createForPhoneAccountHandle(PhoneAccountHandle) + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @WorkerThread @@ -2958,6 +3013,9 @@ public class TelephonyManager { * <p> * @return the lowercase 2 character ISO-3166-1 alpha-2 country code, or empty string if not * available. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public String getNetworkCountryIso() { @@ -2980,6 +3038,8 @@ public class TelephonyManager { * available. * * @throws IllegalArgumentException when the slotIndex is invalid. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -3108,9 +3168,13 @@ public class TelephonyManager { * * @deprecated use {@link #getDataNetworkType()} * @return the NETWORK_TYPE_xxxx for current data connection. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public @NetworkType int getNetworkType() { return getNetworkType(getSubId(SubscriptionManager.getActiveDataSubscriptionId())); } @@ -3199,12 +3263,15 @@ public class TelephonyManager { * @see #NETWORK_TYPE_EHRPD * @see #NETWORK_TYPE_HSPAP * @see #NETWORK_TYPE_NR + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(anyOf = { android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_BASIC_PHONE_STATE}) - @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public @NetworkType int getDataNetworkType() { return getDataNetworkType(getSubId(SubscriptionManager.getActiveDataSubscriptionId())); } @@ -3245,6 +3312,9 @@ public class TelephonyManager { * or {@link android.Manifest.permission#READ_BASIC_PHONE_STATE * READ_BASIC_PHONE_STATE} or that the calling app has carrier privileges * (see {@link #hasCarrierPrivileges}). + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(anyOf = { @@ -3597,6 +3667,9 @@ public class TelephonyManager { * of whether an active SIM profile is present or not so this API would always return true. * * @return true if a ICC card is present. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public boolean hasIccCard() { @@ -3640,6 +3713,9 @@ public class TelephonyManager { * @see #SIM_STATE_PERM_DISABLED * @see #SIM_STATE_CARD_IO_ERROR * @see #SIM_STATE_CARD_RESTRICTED + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public @SimState int getSimState() { @@ -3681,6 +3757,8 @@ public class TelephonyManager { * @see #SIM_STATE_CARD_RESTRICTED * @see #SIM_STATE_PRESENT * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -3701,11 +3779,14 @@ public class TelephonyManager { * @see #SIM_STATE_CARD_RESTRICTED * @see #SIM_STATE_PRESENT * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated instead use {@link #getSimCardState(int, int)} */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @Deprecated public @SimState int getSimCardState(int physicalSlotIndex) { int activePort = getFirstActivePortIndex(physicalSlotIndex); @@ -3727,6 +3808,8 @@ public class TelephonyManager { * @see #SIM_STATE_CARD_RESTRICTED * @see #SIM_STATE_PRESENT * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -3785,6 +3868,8 @@ public class TelephonyManager { * @see #SIM_STATE_PERM_DISABLED * @see #SIM_STATE_LOADED * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -3808,11 +3893,14 @@ public class TelephonyManager { * @see #SIM_STATE_PERM_DISABLED * @see #SIM_STATE_LOADED * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated instead use {@link #getSimApplicationState(int, int)} */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @Deprecated public @SimState int getSimApplicationState(int physicalSlotIndex) { int activePort = getFirstActivePortIndex(physicalSlotIndex); @@ -3836,6 +3924,8 @@ public class TelephonyManager { * @see #SIM_STATE_PERM_DISABLED * @see #SIM_STATE_LOADED * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -3876,6 +3966,9 @@ public class TelephonyManager { * * @param appType the uicc app type like {@link APPTYPE_CSIM} * @return true if the specified type of application in UICC CARD or false if no uicc or error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -3908,6 +4001,9 @@ public class TelephonyManager { * @see #SIM_STATE_PERM_DISABLED * @see #SIM_STATE_CARD_IO_ERROR * @see #SIM_STATE_CARD_RESTRICTED + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public @SimState int getSimState(int slotIndex) { @@ -4105,6 +4201,9 @@ public class TelephonyManager { * the READ_PHONE_STATE permission, or if the calling app is targeting API level 29 or * higher, then a SecurityException is thrown.</li> * </ul> + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // No support for device / profile owner or carrier privileges (b/72967236). @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -4172,6 +4271,9 @@ public class TelephonyManager { * * @return {@code true} if 3GPP and 3GPP2 radio technologies can be supported at the same time * {@code false} if not supported or unknown + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -4219,6 +4321,9 @@ public class TelephonyManager { * through a factory reset. * * @return card ID of the default eUICC card, if loaded. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_EUICC}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_EUICC) public int getCardIdForDefaultEuicc() { @@ -4252,6 +4357,9 @@ public class TelephonyManager { * @return a list of UiccCardInfo objects, representing information on the currently inserted * UICCs and eUICCs. Each UiccCardInfo in the list will have private information filtered out if * the caller does not have adequate permissions for that card. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @@ -4276,6 +4384,8 @@ public class TelephonyManager { * * @return UiccSlotInfo array. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -4319,6 +4429,9 @@ public class TelephonyManager { * @param physicalSlots The content of the array represents the physical slot index. The array * size should be same as {@link #getUiccSlotsInfo()}. * @return boolean Return true if the switch succeeds, false if the switch fails. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated {@link #setSimSlotMapping(Collection, Executor, Consumer)} */ @@ -4328,6 +4441,7 @@ public class TelephonyManager { @SystemApi @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public boolean switchSlots(int[] physicalSlots) { try { ITelephony telephony = getITelephony(); @@ -4420,6 +4534,8 @@ public class TelephonyManager { * @throws IllegalArgumentException if the caller passes in an invalid collection of * UiccSlotMapping like duplicate data, etc * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -4452,11 +4568,14 @@ public class TelephonyManager { * @return a map indicates the mapping from logical slots to physical slots. The size of the map * should be {@link #getPhoneCount()} if success, otherwise return an empty map. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated use {@link #getSimSlotMapping()} instead. */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @NonNull @Deprecated public Map<Integer, Integer> getLogicalToPhysicalSlotMapping() { @@ -4484,6 +4603,9 @@ public class TelephonyManager { * * @return a collection of {@link UiccSlotMapping} which indicates the mapping from logical * slots to ports and physical slots. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -4541,6 +4663,9 @@ public class TelephonyManager { * the READ_PHONE_STATE permission, or if the calling app is targeting API level 29 or * higher, then a SecurityException is thrown.</li> * </ul> + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // No support for device / profile owner or carrier privileges (b/72967236). @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -4593,6 +4718,8 @@ public class TelephonyManager { * found, and the carrier does not require a key. * @throws IllegalArgumentException when an invalid key is found or when key is required but * not found. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -4638,6 +4765,9 @@ public class TelephonyManager { * Requires Permission: MODIFY_PHONE_STATE. * * @see #getCarrierInfoForImsiEncryption + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -4840,6 +4970,9 @@ public class TelephonyManager { * from disk, as well as on which {@code callback} will be called. * @param callback A callback called when the upload operation terminates, either in success * or in error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public void uploadCallComposerPicture(@NonNull Path pictureToUpload, @@ -4947,6 +5080,9 @@ public class TelephonyManager { * read, as well as on which the callback will be called. * @param callback A callback called when the upload operation terminates, either in success * or in error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public void uploadCallComposerPicture(@NonNull InputStream pictureToUpload, @@ -5081,6 +5217,9 @@ public class TelephonyManager { * * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @@ -5139,6 +5278,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @deprecated use {@link SubscriptionManager#getPhoneNumber(int)} instead. */ @Deprecated @@ -5148,6 +5289,7 @@ public class TelephonyManager { android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS }) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public String getLine1Number() { return getLine1Number(getSubId()); } @@ -5214,9 +5356,13 @@ public class TelephonyManager { * @param alphaTag alpha-tagging of the dailing nubmer * @param number The dialing number * @return true if the operation was executed correctly. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @deprecated use {@link SubscriptionManager#setCarrierPhoneNumber(int, String)} instead. */ @Deprecated + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public boolean setLine1NumberForDisplay(String alphaTag, String number) { return setLine1NumberForDisplay(getSubId(), alphaTag, number); } @@ -5336,6 +5482,8 @@ public class TelephonyManager { * {@link SubscriptionManager#createSubscriptionGroup(List)} for the definition of a group, * otherwise return an empty array if there is a failure. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -5421,6 +5569,9 @@ public class TelephonyManager { * * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @@ -5459,6 +5610,9 @@ public class TelephonyManager { * * @param alphaTag The alpha tag to display. * @param number The voicemail number. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public boolean setVoiceMailNumber(String alphaTag, String number) { @@ -5533,6 +5687,8 @@ public class TelephonyManager { * @see #KEY_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL * @see #KEY_VOICEMAIL_SCRAMBLED_PIN_STRING * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @SystemApi @@ -5563,6 +5719,9 @@ public class TelephonyManager { * @see #createForSubscriptionId(int) * @see #createForPhoneAccountHandle(PhoneAccountHandle) * @see VisualVoicemailService + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @Nullable @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @@ -5593,6 +5752,9 @@ public class TelephonyManager { * * @see TelecomManager#getDefaultDialerPackage() * @see CarrierConfigManager#KEY_CARRIER_VVM_PACKAGE_NAME_STRING_ARRAY + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public void setVisualVoicemailSmsFilterSettings(VisualVoicemailSmsFilterSettings settings) { @@ -5623,6 +5785,9 @@ public class TelephonyManager { * * @see SmsManager#sendDataMessage(String, String, short, byte[], PendingIntent, PendingIntent) * @see SmsManager#sendTextMessage(String, String, String, PendingIntent, PendingIntent) + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public void sendVisualVoicemailSms(String number, int port, String text, @@ -5808,6 +5973,9 @@ public class TelephonyManager { * @see #SIM_ACTIVATION_STATE_ACTIVATING * @see #SIM_ACTIVATION_STATE_ACTIVATED * @see #SIM_ACTIVATION_STATE_DEACTIVATED + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING} * @hide */ @SystemApi @@ -5856,6 +6024,9 @@ public class TelephonyManager { * @see #SIM_ACTIVATION_STATE_ACTIVATED * @see #SIM_ACTIVATION_STATE_DEACTIVATED * @see #SIM_ACTIVATION_STATE_RESTRICTED + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @SystemApi @@ -5904,6 +6075,9 @@ public class TelephonyManager { * @see #SIM_ACTIVATION_STATE_ACTIVATING * @see #SIM_ACTIVATION_STATE_ACTIVATED * @see #SIM_ACTIVATION_STATE_DEACTIVATED + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @SystemApi @@ -5954,6 +6128,9 @@ public class TelephonyManager { * @see #SIM_ACTIVATION_STATE_ACTIVATED * @see #SIM_ACTIVATION_STATE_DEACTIVATED * @see #SIM_ACTIVATION_STATE_RESTRICTED + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @SystemApi @@ -6032,6 +6209,9 @@ public class TelephonyManager { * * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @@ -6072,7 +6252,10 @@ public class TelephonyManager { * * @throws SecurityException if the caller does not have carrier privileges or is not the * current default dialer + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public void sendDialerSpecialCode(String inputCode) { try { final ITelephony telephony = getITelephony(); @@ -6143,6 +6326,9 @@ public class TelephonyManager { * * <p>Requires Permission: * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE} + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @Nullable @@ -6168,6 +6354,9 @@ public class TelephonyManager { * Returns the IMS public user identities (IMPU) that were loaded from the ISIM. * @return an array of IMPU strings, with one IMPU per string, or null if * not present or not loaded + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated use {@link #getImsPublicUserIdentities()} */ @@ -6199,6 +6388,8 @@ public class TelephonyManager { * EF_IMPU is not available. * @throws IllegalStateException in case the ISIM hasn’t been loaded * @throws SecurityException if the caller does not have the required permission/privilege + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @NonNull @@ -6254,6 +6445,10 @@ public class TelephonyManager { * targeting API level 31+. * * @return the current call state. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELECOM}. + * * @deprecated Use {@link #getCallStateForSubscription} to retrieve the call state for a * specific telephony subscription (which allows carrier privileged apps), * {@link TelephonyCallback.CallStateListener} for real-time call state updates, or @@ -6261,6 +6456,7 @@ public class TelephonyManager { * device. */ @RequiresPermission(value = android.Manifest.permission.READ_PHONE_STATE, conditional = true) + @RequiresFeature(PackageManager.FEATURE_TELECOM) @Deprecated public @CallState int getCallState() { if (mContext != null) { @@ -6281,6 +6477,9 @@ public class TelephonyManager { * @see TelephonyManager#createForSubscriptionId(int) * @see TelephonyManager#createForPhoneAccountHandle(PhoneAccountHandle) * @return The call state of the subscription associated with this TelephonyManager instance. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) @@ -6341,6 +6540,9 @@ public class TelephonyManager { * @see #DATA_ACTIVITY_OUT * @see #DATA_ACTIVITY_INOUT * @see #DATA_ACTIVITY_DORMANT + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public int getDataActivity() { @@ -6414,6 +6616,9 @@ public class TelephonyManager { * @see #DATA_SUSPENDED * @see #DATA_DISCONNECTING * @see #DATA_HANDOVER_IN_PROGRESS + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public int getDataState() { @@ -6599,10 +6804,14 @@ public class TelephonyManager { * Returns the CDMA ERI icon display number. The number is assigned by * 3GPP2 C.R1001-H v1.0 Table 8.1-1. Additionally carriers define their own ERI display numbers. * Defined values are {@link #ERI_ON}, {@link #ERI_OFF}, and {@link #ERI_FLASH}. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CDMA) public @EriIconIndex int getCdmaEnhancedRoamingIndicatorDisplayNumber() { return getCdmaEriIconIndex(getSubId()); } @@ -6810,6 +7019,9 @@ public class TelephonyManager { * * @return List of {@link android.telephony.CellInfo}; null if cell * information is unavailable. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -6905,6 +7117,9 @@ public class TelephonyManager { * * @param executor the executor on which callback will be invoked. * @param callback a callback to receive CellInfo. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -6966,6 +7181,9 @@ public class TelephonyManager { * @param workSource the requestor to whom the power consumption for this should be attributed. * @param executor the executor on which callback will be invoked. * @param callback a callback to receive CellInfo. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -7052,6 +7270,9 @@ public class TelephonyManager { /** * Returns the MMS user agent. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_MESSAGING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING) public String getMmsUserAgent() { @@ -7068,6 +7289,9 @@ public class TelephonyManager { /** * Returns the MMS user agent profile URL. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_MESSAGING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING) public String getMmsUAProfUrl() { @@ -7111,8 +7335,12 @@ public class TelephonyManager { * * @param AID Application id. See ETSI 102.221 and 101.220. * @return an IccOpenLogicalChannelResponse object. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @deprecated Replaced by {@link #iccOpenLogicalChannel(String, int)} */ + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @Deprecated public IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID) { return iccOpenLogicalChannel(getSubId(), AID, -1); @@ -7145,6 +7373,8 @@ public class TelephonyManager { * @param aid Application id. See ETSI 102.221 and 101.220. * @param p2 P2 parameter (described in ISO 7816-4). * @return an IccOpenLogicalChannelResponse object. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated This API is not compatible on eUICC supporting Multiple Enabled Profile(MEP), * instead use {@link #iccOpenLogicalChannelByPort(int, int, String, int)} @@ -7200,9 +7430,13 @@ public class TelephonyManager { * @param aid Application id. See ETSI 102.221 and 101.220. * @param p2 P2 parameter (described in ISO 7816-4). * @return an IccOpenLogicalChannelResponse object. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @SystemApi @NonNull public IccOpenLogicalChannelResponse iccOpenLogicalChannelByPort(int slotIndex, @@ -7255,6 +7489,9 @@ public class TelephonyManager { * @param AID Application id. See ETSI 102.221 and 101.220. * @param p2 P2 parameter (described in ISO 7816-4). * @return an IccOpenLogicalChannelResponse object. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID, int p2) { @@ -7321,6 +7558,9 @@ public class TelephonyManager { * @param channel is the channel id to be closed as returned by a successful * iccOpenLogicalChannel. * @return true if the channel was closed successfully. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated This API is not compatible on eUICC supporting Multiple Enabled Profile(MEP), * instead use {@link #iccCloseLogicalChannelByPort(int, int, int)} @@ -7365,9 +7605,12 @@ public class TelephonyManager { * @throws IllegalStateException if the Telephony process is not currently available or modem * currently can't process this command. * @throws IllegalArgumentException if invalid arguments are passed. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @SystemApi public void iccCloseLogicalChannelByPort(int slotIndex, int portIndex, int channel) { try { @@ -7403,6 +7646,8 @@ public class TelephonyManager { * iccOpenLogicalChannel. * @return true if the channel was closed successfully. * @throws IllegalArgumentException if input parameters are wrong. e.g., invalid channel + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public boolean iccCloseLogicalChannel(int channel) { @@ -7469,6 +7714,8 @@ public class TelephonyManager { * @param data Data to be sent with the APDU. * @return The APDU response from the ICC card with the status appended at the end, or null if * there is an issue connecting to the Telephony service. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated This API is not compatible on eUICC supporting Multiple Enabled Profile(MEP), * instead use @@ -7516,9 +7763,13 @@ public class TelephonyManager { * @param data Data to be sent with the APDU. * @return The APDU response from the ICC card with the status appended at the end, or null if * there is an issue connecting to the Telephony service. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @SystemApi @NonNull public String iccTransmitApduLogicalChannelByPort(int slotIndex, int portIndex, int channel, @@ -7563,6 +7814,9 @@ public class TelephonyManager { * @param data Data to be sent with the APDU. * @return The APDU response from the ICC card with the status appended at * the end. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public String iccTransmitApduLogicalChannel(int channel, int cla, @@ -7628,6 +7882,9 @@ public class TelephonyManager { * @param data Data to be sent with the APDU. * @return The APDU response from the ICC card with the status appended at * the end. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide * @deprecated This API is not compatible on eUICC supporting Multiple Enabled Profile(MEP), * instead use @@ -7673,9 +7930,13 @@ public class TelephonyManager { * @param data Data to be sent with the APDU. * @return The APDU response from the ICC card with the status appended at * the end. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @SystemApi @NonNull public String iccTransmitApduBasicChannelByPort(int slotIndex, int portIndex, int cla, @@ -7712,6 +7973,9 @@ public class TelephonyManager { * @param data Data to be sent with the APDU. * @return The APDU response from the ICC card with the status appended at * the end. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public String iccTransmitApduBasicChannel(int cla, @@ -7768,6 +8032,9 @@ public class TelephonyManager { * @param p3 P3 value of the APDU command. * @param filePath * @return The APDU response. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public byte[] iccExchangeSimIO(int fileID, int command, int p1, int p2, int p3, @@ -7817,6 +8084,9 @@ public class TelephonyManager { * @return The APDU response from the ICC card in hexadecimal format * with the last 4 bytes being the status word. If the command fails, * returns an empty string. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public String sendEnvelopeWithStatus(String content) { @@ -7978,6 +8248,8 @@ public class TelephonyManager { * * @return {@code true} on success; {@code false} on any failure. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) @@ -8008,6 +8280,8 @@ public class TelephonyManager { * * @deprecated Using {@link #rebootModem()} instead. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) @@ -8035,6 +8309,8 @@ public class TelephonyManager { * app has carrier privileges (see {@link #hasCarrierPrivileges}). * @throws IllegalStateException if the Telephony process is not currently available. * @throws RuntimeException + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -8166,6 +8442,9 @@ public class TelephonyManager { * {@link #getMaxNumberVerificationTimeoutMillis()}, whichever is lesser. * @param executor The {@link Executor} that callbacks should be executed on. * @param callback The callback to use for delivering results. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @SystemApi @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) @@ -8378,6 +8657,9 @@ public class TelephonyManager { * See 3GPP TS 31.103 (Section 4.2.7) for the definition and more information on this table. * * @return IMS Service Table or null if not present or not loaded + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @Nullable @@ -8496,6 +8778,9 @@ public class TelephonyManager { * Key freshness failure * Authentication error, no memory space available * Authentication error, no memory space available in EFMUK + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ // TODO(b/73660190): This should probably require MODIFY_PHONE_STATE, not // READ_PRIVILEGED_PHONE_STATE. It certainly shouldn't reference the permission in Javadoc since @@ -8552,6 +8837,9 @@ public class TelephonyManager { * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). * * @return an array of forbidden PLMNs or null if not available + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @@ -8602,6 +8890,9 @@ public class TelephonyManager { * @return number of PLMNs that were successfully written to the SIM FPLMN list. * This may be less than the number of PLMNs passed in where the SIM file does not have enough * room for all of the values passed in. Return -1 in the event of an unexpected failure + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -8637,6 +8928,8 @@ public class TelephonyManager { * @param appType of type int of either {@link #APPTYPE_USIM} or {@link #APPTYPE_ISIM}. * @return HexString represents sim service table else null. * @throws SecurityException if the caller does not have the required permission/privileges + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @@ -8673,6 +8966,9 @@ public class TelephonyManager { * state. * * @param slotIndex the sim slot to reset the IMS stack on. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_IMS}. * @hide */ @SystemApi @WorkerThread @@ -9084,12 +9380,15 @@ public class TelephonyManager { * * @return The bitmask of preferred network types. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide * @deprecated Use {@link #getAllowedNetworkTypesBitmask} instead. */ @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @SystemApi + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public @NetworkTypeBitMask long getPreferredNetworkTypeBitmask() { return getAllowedNetworkTypesBitmask(); } @@ -9108,6 +9407,8 @@ public class TelephonyManager { * * @return The bitmask of allowed network types. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -9133,10 +9434,14 @@ public class TelephonyManager { * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). * * @return the allowed network type bitmask + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide * @deprecated Use {@link #getAllowedNetworkTypesForReason} instead. */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @SystemApi @Deprecated public @NetworkTypeBitMask long getAllowedNetworkTypes() { @@ -9161,6 +9466,9 @@ public class TelephonyManager { * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -9247,6 +9555,9 @@ public class TelephonyManager { * tasks one at a time in serial order. * @param callback Returns network scan results or errors. * @return A NetworkScan obj which contains a callback which can be used to stop the scan. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(allOf = { @@ -9295,11 +9606,15 @@ public class TelephonyManager { * tasks one at a time in serial order. * @param callback Returns network scan results or errors. * @return A NetworkScan obj which contains a callback which can be used to stop the scan. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(allOf = { android.Manifest.permission.MODIFY_PHONE_STATE }) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public @Nullable NetworkScan requestNetworkScan( @IncludeLocationData int includeLocationData, @NonNull NetworkScanRequest request, @@ -9317,6 +9632,9 @@ public class TelephonyManager { } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. + * * @deprecated * Use {@link * #requestNetworkScan(NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)} @@ -9327,6 +9645,7 @@ public class TelephonyManager { android.Manifest.permission.MODIFY_PHONE_STATE, Manifest.permission.ACCESS_FINE_LOCATION }) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public NetworkScan requestNetworkScan( NetworkScanRequest request, TelephonyScanManager.NetworkScanCallback callback) { return requestNetworkScan(request, AsyncTask.SERIAL_EXECUTOR, callback); @@ -9347,6 +9666,9 @@ public class TelephonyManager { * attaching to the selected PLMN until reboot; otherwise, attach to the chosen PLMN and resume * normal network selection next time. * @return {@code true} on success; {@code false} on any failure. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -9378,6 +9700,9 @@ public class TelephonyManager { * {@link AccessNetworkConstants.AccessNetworkType#UNKNOWN}, modem will select * the next best RAN for network registration. * @return {@code true} on success; {@code false} on any failure. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -9430,6 +9755,9 @@ public class TelephonyManager { * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). * * @return the network selection mode. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // No support for carrier privileges (b/72967236). @RequiresPermission(anyOf = { @@ -9459,6 +9787,9 @@ public class TelephonyManager { * (see {@link #hasCarrierPrivileges}) * * @return manually selected network info on success or empty string on failure + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // No support carrier privileges (b/72967236). @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) @@ -9488,6 +9819,8 @@ public class TelephonyManager { * * @return {@code true} if this device is in emergency SMS mode, {@code false} otherwise. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_MESSAGING}. * @hide */ @SystemApi @@ -9557,11 +9890,15 @@ public class TelephonyManager { * * @param networkTypeBitmask The bitmask of preferred network types. * @return true on success; false on any failure. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide * @deprecated Use {@link #setAllowedNetworkTypesForReason} instead. */ @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @SystemApi public boolean setPreferredNetworkTypeBitmask(@NetworkTypeBitMask long networkTypeBitmask) { try { @@ -9603,6 +9940,10 @@ public class TelephonyManager { * * @param allowedNetworkTypes The bitmask of allowed network types. * @return true on success; false on any failure. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. + * * @hide * @deprecated Use {@link #setAllowedNetworkTypesForReason} instead with reason * {@link #ALLOWED_NETWORK_TYPES_REASON_CARRIER}. @@ -9690,11 +10031,16 @@ public class TelephonyManager { * @throws IllegalStateException if the Telephony process is not currently available. * @throws IllegalArgumentException if invalid AllowedNetworkTypesReason is passed. * @throws SecurityException if the caller does not have the required privileges or if the + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * caller tries to use one of the following security-based reasons without * {@link android.Manifest.permission#MODIFY_PHONE_STATE} permissions. * <ol> * <li>{@code TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G}</li> * </ol> + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature( @@ -9734,6 +10080,8 @@ public class TelephonyManager { * @throws IllegalStateException if the Telephony process is not currently available. * @throws IllegalArgumentException if invalid AllowedNetworkTypesReason is passed. * @throws SecurityException if the caller does not have the required permission/privileges + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @RequiresFeature( @@ -9808,6 +10156,9 @@ public class TelephonyManager { * <p>Requires that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). * * @return true on success; false on any failure. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public boolean setPreferredNetworkTypeToGlobal() { @@ -9833,6 +10184,9 @@ public class TelephonyManager { * Requires Permission: MODIFY_PHONE_STATE. * * @return {@code true} if DUN APN is required for tethering. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -9886,6 +10240,9 @@ public class TelephonyManager { * is a superset of the checks done in SubscriptionManager#canManageSubscription. * * @return true if the app has carrier privileges. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public boolean hasCarrierPrivileges() { @@ -9933,6 +10290,9 @@ public class TelephonyManager { * * @param brand The brand name to display/set. * @return true if the operation was executed correctly. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public boolean setOperatorBrandOverride(String brand) { @@ -10034,7 +10394,11 @@ public class TelephonyManager { * Expose the rest of ITelephony to @SystemApi */ - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CDMA) @@ -10042,7 +10406,11 @@ public class TelephonyManager { return getCdmaMdn(getSubId()); } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CDMA) @@ -10059,7 +10427,11 @@ public class TelephonyManager { } } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CDMA) @@ -10067,7 +10439,11 @@ public class TelephonyManager { return getCdmaMin(getSubId()); } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CDMA) @@ -10084,7 +10460,11 @@ public class TelephonyManager { } } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @@ -10101,7 +10481,11 @@ public class TelephonyManager { return CARRIER_PRIVILEGE_STATUS_NO_ACCESS; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @@ -10118,14 +10502,22 @@ public class TelephonyManager { return CARRIER_PRIVILEGE_STATUS_NO_ACCESS; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. + * @hide + */ @SystemApi @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public List<String> getCarrierPackageNamesForIntent(Intent intent) { return getCarrierPackageNamesForIntentAndPhone(intent, getPhoneId()); } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @@ -10152,10 +10544,13 @@ public class TelephonyManager { * @return The system-selected package that provides the {@link CarrierService} implementation * for the current subscription, or {@code null} if none is resolved * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public @Nullable String getCarrierServicePackageName() { return getCarrierServicePackageNameForLogicalSlot(getPhoneId()); } @@ -10169,10 +10564,13 @@ public class TelephonyManager { * @return The system-selected package that provides the {@link CarrierService} implementation * for the slot, or {@code null} if none is resolved * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public @Nullable String getCarrierServicePackageNameForLogicalSlot(int logicalSlotIndex) { try { ITelephony telephony = getITelephony(); @@ -10206,6 +10604,8 @@ public class TelephonyManager { /** * Get the names of packages with carrier privileges for all the active subscriptions. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -10256,6 +10656,8 @@ public class TelephonyManager { * * @throws IllegalArgumentException if requested state is invalid. * @throws SecurityException if the caller does not have the permission. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) @@ -10285,6 +10687,9 @@ public class TelephonyManager { * * @return the user-set status for enriched calling with call composer, either of * {@link #CALL_COMPOSER_STATUS_ON} or {@link #CALL_COMPOSER_STATUS_OFF}. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) @@ -10301,7 +10706,11 @@ public class TelephonyManager { return CALL_COMPOSER_STATUS_OFF; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. + * @hide + */ @SystemApi @SuppressLint("RequiresPermission") @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) @@ -10316,6 +10725,9 @@ public class TelephonyManager { } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. + * * @deprecated Use {@link android.telecom.TelecomManager#placeCall(Uri address, * Bundle extras)} instead. * @hide @@ -10323,6 +10735,7 @@ public class TelephonyManager { @Deprecated @SystemApi @RequiresPermission(android.Manifest.permission.CALL_PHONE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public void call(String callingPackage, String number) { try { ITelephony telephony = getITelephony(); @@ -10369,6 +10782,8 @@ public class TelephonyManager { } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELECOM}. * @deprecated Use {@link android.telecom.TelecomManager#isInCall} instead * @hide */ @@ -10378,12 +10793,15 @@ public class TelephonyManager { android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE }) + @RequiresFeature(PackageManager.FEATURE_TELECOM) public boolean isOffhook() { TelecomManager tm = (TelecomManager) mContext.getSystemService(TELECOM_SERVICE); return tm.isInCall(); } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELECOM}. * @deprecated Use {@link android.telecom.TelecomManager#isRinging} instead * @hide */ @@ -10393,12 +10811,15 @@ public class TelephonyManager { android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE }) + @RequiresFeature(PackageManager.FEATURE_TELECOM) public boolean isRinging() { TelecomManager tm = (TelecomManager) mContext.getSystemService(TELECOM_SERVICE); return tm.isRinging(); } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELECOM}. * @deprecated Use {@link android.telecom.TelecomManager#isInCall} instead * @hide */ @@ -10408,12 +10829,15 @@ public class TelephonyManager { android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE }) + @RequiresFeature(PackageManager.FEATURE_TELECOM) public boolean isIdle() { TelecomManager tm = (TelecomManager) mContext.getSystemService(TELECOM_SERVICE); return !tm.isInCall(); } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @deprecated Use {@link android.telephony.TelephonyManager#getServiceState} instead * @hide */ @@ -10423,6 +10847,7 @@ public class TelephonyManager { android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE }) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public boolean isRadioOn() { try { ITelephony telephony = getITelephony(); @@ -10434,7 +10859,11 @@ public class TelephonyManager { return false; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @@ -10449,7 +10878,11 @@ public class TelephonyManager { return false; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @@ -10465,11 +10898,15 @@ public class TelephonyManager { } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. + * * @deprecated use {@link #supplyIccLockPin(String)} instead. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @Deprecated public int[] supplyPinReportResult(String pin) { try { @@ -10483,11 +10920,15 @@ public class TelephonyManager { } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. + * * @deprecated use {@link #supplyIccLockPuk(String, String)} instead. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @Deprecated public int[] supplyPukReportResult(String puk, String pin) { try { @@ -10513,6 +10954,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -10549,6 +10992,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -10622,6 +11067,9 @@ public class TelephonyManager { * @param callback called by the framework to inform the caller of the result of executing the * USSD request (see {@link UssdResponseCallback}). * @param handler the {@link Handler} to run the request on. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresPermission(android.Manifest.permission.CALL_PHONE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -10666,6 +11114,9 @@ public class TelephonyManager { * voice and data simultaneously. This can change based on location or network condition. * * @return {@code true} if simultaneous voice and data supported, and {@code false} otherwise. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public boolean isConcurrentVoiceAndDataSupported() { @@ -10679,9 +11130,13 @@ public class TelephonyManager { return false; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. + * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public boolean handlePinMmi(String dialString) { try { ITelephony telephony = getITelephony(); @@ -10693,9 +11148,14 @@ public class TelephonyManager { return false; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public boolean handlePinMmiForSubscriber(int subId, String dialString) { try { ITelephony telephony = getITelephony(); @@ -10707,7 +11167,11 @@ public class TelephonyManager { return false; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -10725,6 +11189,8 @@ public class TelephonyManager { * @deprecated - use the APIs {@link requestRadioPowerOffForReason} and * {@link clearRadioPowerOffForReason}. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @Deprecated @@ -10752,6 +11218,8 @@ public class TelephonyManager { * @deprecated - use the APIs {@link requestRadioPowerOffForReason} and * {@link clearRadioPowerOffForReason}. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @Deprecated @@ -10799,6 +11267,8 @@ public class TelephonyManager { * @throws SecurityException if the caller does not have MODIFY_PHONE_STATE permission. * @throws IllegalStateException if the Telephony service is not currently available. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -10828,6 +11298,8 @@ public class TelephonyManager { * @throws SecurityException if the caller does not have MODIFY_PHONE_STATE permission. * @throws IllegalStateException if the Telephony service is not currently available. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -10857,6 +11329,8 @@ public class TelephonyManager { * @throws SecurityException if the caller does not have READ_PRIVILEGED_PHONE_STATE permission. * @throws IllegalStateException if the Telephony service is not currently available. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -10886,6 +11360,8 @@ public class TelephonyManager { * <p>To know when the radio has completed powering off, use * {@link PhoneStateListener#LISTEN_SERVICE_STATE LISTEN_SERVICE_STATE}. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -10907,6 +11383,9 @@ public class TelephonyManager { * Check if any radio is on over all the slot indexes. * * @return {@code true} if any radio is on over any slot index. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -10953,6 +11432,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#READ_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -10982,7 +11463,11 @@ public class TelephonyManager { Log.e(TAG, "Do not call TelephonyManager#updateServiceLocation()"); } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) @@ -10997,7 +11482,11 @@ public class TelephonyManager { return false; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. + * @hide + */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) @@ -11012,7 +11501,11 @@ public class TelephonyManager { return false; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. + * @hide + */ @SystemApi @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public boolean isDataConnectivityPossible() { @@ -11027,7 +11520,11 @@ public class TelephonyManager { return false; } - /** @hide */ + /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. + * @hide + */ @SystemApi @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public boolean needsOtaServiceProvisioning() { @@ -11078,23 +11575,29 @@ public class TelephonyManager { * app has carrier privileges (see {@link #hasCarrierPrivileges}). * * @param enable Whether to enable mobile data. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @deprecated use setDataEnabledForReason with reason DATA_ENABLED_REASON_USER instead. * */ @Deprecated @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public void setDataEnabled(boolean enable) { setDataEnabled(getSubId(SubscriptionManager.getDefaultDataSubscriptionId()), enable); } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide * @deprecated use {@link #setDataEnabledForReason(int, boolean)} instead. */ @SystemApi @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public void setDataEnabled(int subId, boolean enable) { try { setDataEnabledForReason(subId, DATA_ENABLED_REASON_USER, enable); @@ -11105,10 +11608,14 @@ public class TelephonyManager { /** * @deprecated use {@link #isDataEnabled()} instead. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @SystemApi @Deprecated + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public boolean getDataEnabled() { return isDataEnabled(); } @@ -11132,6 +11639,9 @@ public class TelephonyManager { * {@link ConnectivityManager#getRestrictBackgroundStatus}. * * @return true if mobile data is enabled. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.MODIFY_PHONE_STATE, @@ -11162,6 +11672,9 @@ public class TelephonyManager { * has carrier privileges (see {@link #hasCarrierPrivileges}). * * @return {@code true} if the data roaming is enabled on the subscription, otherwise return + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * {@code false}. */ @RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE, @@ -11201,6 +11714,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE} * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. * @hide */ @SystemApi @@ -11243,6 +11758,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. * @hide */ @SystemApi @@ -11311,6 +11828,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE} * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. * @hide */ @SystemApi @@ -11349,6 +11868,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. * @hide */ @SystemApi @@ -11384,6 +11905,8 @@ public class TelephonyManager { * * @param isEnabled {@code true} to enable mobile data roaming, otherwise disable it. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @SystemApi @@ -11402,11 +11925,15 @@ public class TelephonyManager { } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. + * * @deprecated use {@link #isDataEnabled()} instead. * @hide */ @Deprecated @SystemApi + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public boolean getDataEnabled(int subId) { try { return isDataEnabledForReason(subId, DATA_ENABLED_REASON_USER); @@ -11417,6 +11944,8 @@ public class TelephonyManager { } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_IMS}. * @deprecated Use {@link android.telephony.ims.ImsMmTelManager#setVtSettingEnabled(boolean)} * instead. * @hide @@ -11424,6 +11953,7 @@ public class TelephonyManager { @Deprecated @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_IMS) public void enableVideoCalling(boolean enable) { try { ITelephony telephony = getITelephony(); @@ -11435,6 +11965,8 @@ public class TelephonyManager { } /** + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_IMS}. * @deprecated Use {@link ImsMmTelManager#isVtSettingEnabled()} instead to check if the user * has enabled the Video Calling setting, {@link ImsMmTelManager#isAvailable(int, int)} to * determine if video calling is available, or {@link ImsMmTelManager#isCapable(int, int)} to @@ -11447,6 +11979,7 @@ public class TelephonyManager { android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE }) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_IMS) public boolean isVideoCallingEnabled() { try { ITelephony telephony = getITelephony(); @@ -11462,6 +11995,9 @@ public class TelephonyManager { * Whether the device supports configuring the DTMF tone length. * * @return {@code true} if the DTMF tone length can be changed, and {@code false} otherwise. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public boolean canChangeDtmfToneLength() { @@ -11483,7 +12019,11 @@ public class TelephonyManager { * Whether the device is a world phone. * * @return {@code true} if the device is a world phone, and {@code false} otherwise. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. */ + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) public boolean isWorldPhone() { try { ITelephony telephony = getITelephony(); @@ -11504,8 +12044,11 @@ public class TelephonyManager { * * @return {@code true} if the device supports TTY mode, and {@code false} otherwise. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELECOM}. */ @Deprecated + @RequiresFeature(PackageManager.FEATURE_TELECOM) public boolean isTtyModeSupported() { try { TelecomManager telecomManager = null; @@ -11526,6 +12069,9 @@ public class TelephonyManager { * support for the feature and device firmware support. * * @return {@code true} if the device and carrier both support RTT, {@code false} otherwise. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_IMS}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_IMS) public boolean isRttSupported() { @@ -11546,6 +12092,9 @@ public class TelephonyManager { * * @return {@code true} if the device supports hearing aid compatibility, and {@code false} * otherwise. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public boolean isHearingAidCompatibilitySupported() { @@ -11808,11 +12357,14 @@ public class TelephonyManager { * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * {@hide} **/ @SystemApi @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public void setSimPowerState(int state) { setSimPowerStateForSlot(getSlotIndex(), state); } @@ -11834,11 +12386,14 @@ public class TelephonyManager { * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * {@hide} **/ @SystemApi @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public void setSimPowerStateForSlot(int slotIndex, int state) { try { ITelephony telephony = getITelephony(); @@ -11871,6 +12426,8 @@ public class TelephonyManager { * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * {@hide} **/ @SystemApi @@ -11901,6 +12458,8 @@ public class TelephonyManager { * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * {@hide} **/ @SystemApi @@ -12055,6 +12614,9 @@ public class TelephonyManager { * application currently configured for this user. * @return component name of the app and class to direct Respond Via Message intent to, or * {@code null} if the functionality is not supported. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_MESSAGING}. * @hide */ @SystemApi @@ -12077,6 +12639,9 @@ public class TelephonyManager { * user associated with this subscription. * @return component name of the app and class to direct Respond Via Message intent to, or * {@code null} if the functionality is not supported. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_MESSAGING}. * @hide */ @SystemApi @@ -12213,9 +12778,13 @@ public class TelephonyManager { * @return The {@link PhoneAccountHandle} associated with the TelphonyManager, or {@code null} * if there is no associated {@link PhoneAccountHandle}; this can happen if the subscription is * data-only or an opportunistic subscription. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public @Nullable PhoneAccountHandle getPhoneAccountHandle() { return getPhoneAccountHandleForSubscriptionId(getSubId()); } @@ -12277,10 +12846,14 @@ public class TelephonyManager { * Resets Telephony and IMS settings back to factory defaults only for the subscription * associated with this instance. * @see #createForSubscriptionId(int) + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. * @hide */ @SystemApi @RequiresPermission(Manifest.permission.CONNECTIVITY_INTERNAL) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) public void resetSettings() { try { Log.d(TAG, "resetSettings: subId=" + getSubId()); @@ -12302,6 +12875,8 @@ public class TelephonyManager { * * @see Locale#toLanguageTag() * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -12394,10 +12969,14 @@ public class TelephonyManager { * @param callback A callback object to which the result will be delivered. If there was an * error processing the request, {@link OutcomeReceiver#onError} will be called * with more details about the error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. * @hide */ @SystemApi @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) public void requestModemActivityInfo(@NonNull @CallbackExecutor Executor executor, @NonNull OutcomeReceiver<ModemActivityInfo, ModemActivityInfoException> callback) { Objects.requireNonNull(executor); @@ -12484,6 +13063,9 @@ public class TelephonyManager { * and {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}. * May return {@code null} when the subscription is inactive or when there was an error * communicating with the phone process. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(allOf = { @@ -12516,12 +13098,16 @@ public class TelephonyManager { * location related information. * May return {@code null} when the subscription is inactive or when there was an error * communicating with the phone process. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(allOf = { Manifest.permission.READ_PHONE_STATE, Manifest.permission.ACCESS_COARSE_LOCATION }) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public @Nullable ServiceState getServiceState(@IncludeLocationData int includeLocationData) { return getServiceStateForSubscriber(getSubId(), includeLocationData != INCLUDE_LOCATION_DATA_FINE, @@ -12580,6 +13166,9 @@ public class TelephonyManager { * voicemail ringtone. * @return The URI for the ringtone to play when receiving a voicemail from a specific * PhoneAccount. May be {@code null} if no ringtone is set. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public @Nullable Uri getVoicemailRingtoneUri(PhoneAccountHandle accountHandle) { @@ -12606,10 +13195,13 @@ public class TelephonyManager { * @param uri The URI for the ringtone to play when receiving a voicemail from a specific * PhoneAccount. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @deprecated Use {@link android.provider.Settings#ACTION_CHANNEL_NOTIFICATION_SETTINGS} * instead. */ @Deprecated + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public void setVoicemailRingtoneUri(PhoneAccountHandle phoneAccountHandle, Uri uri) { try { ITelephony service = getITelephony(); @@ -12627,6 +13219,9 @@ public class TelephonyManager { * @param accountHandle The handle for the {@link PhoneAccount} for which to retrieve the * voicemail vibration setting. * @return {@code true} if the vibration is set for this PhoneAccount, {@code false} otherwise. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public boolean isVoicemailVibrationEnabled(PhoneAccountHandle accountHandle) { @@ -12653,10 +13248,13 @@ public class TelephonyManager { * @param enabled Whether to enable or disable vibration for voicemail notifications from a * specific PhoneAccount. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @deprecated Use {@link android.provider.Settings#ACTION_CHANNEL_NOTIFICATION_SETTINGS} * instead. */ @Deprecated + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public void setVoicemailVibrationEnabled(PhoneAccountHandle phoneAccountHandle, boolean enabled) { try { @@ -12682,6 +13280,9 @@ public class TelephonyManager { * * @return Carrier id of the current subscription. Return {@link #UNKNOWN_CARRIER_ID} if the * subscription is unavailable or the carrier cannot be identified. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public int getSimCarrierId() { @@ -12707,6 +13308,9 @@ public class TelephonyManager { * * @return Carrier name of the current subscription. Return {@code null} if the subscription is * unavailable or the carrier cannot be identified. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public @Nullable CharSequence getSimCarrierIdName() { @@ -12745,6 +13349,9 @@ public class TelephonyManager { * @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. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public int getSimSpecificCarrierId() { @@ -12771,6 +13378,9 @@ public class TelephonyManager { * * @return user-facing name of the subscription specific carrier id. Return {@code null} if the * subscription is unavailable or the carrier cannot be identified. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public @Nullable CharSequence getSimSpecificCarrierIdName() { @@ -12799,6 +13409,9 @@ public class TelephonyManager { * * @return matching carrier id from sim MCCMNC. Return {@link #UNKNOWN_CARRIER_ID} if the * subscription is unavailable or the carrier cannot be identified. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public int getCarrierIdFromSimMccMnc() { @@ -12874,6 +13487,9 @@ public class TelephonyManager { * * @param appType the uicc app type. * @return Application ID for specified app type or {@code null} if no uicc or error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @Nullable @@ -12939,6 +13555,9 @@ public class TelephonyManager { * Requires that the calling app has READ_PRIVILEGED_PHONE_STATE permission * * @return PRLVersion or null if error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CDMA}. * @hide */ @SystemApi @@ -13004,6 +13623,9 @@ public class TelephonyManager { * * @return The number of carriers set successfully. Should be length of * carrierList on success; -1 if carrierList null or on error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CARRIERLOCK}. * @hide */ @SystemApi @@ -13130,6 +13752,9 @@ public class TelephonyManager { * @return {@link #SET_CARRIER_RESTRICTION_SUCCESS} in case of success. * {@link #SET_CARRIER_RESTRICTION_NOT_SUPPORTED} if the modem does not support the * configuration. {@link #SET_CARRIER_RESTRICTION_ERROR} in all other error cases. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CARRIERLOCK}. * @hide */ @SystemApi @@ -13163,11 +13788,15 @@ public class TelephonyManager { * * @return List of {@link android.telephony.CarrierIdentifier}; empty list * means all carriers are allowed. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CARRIERLOCK}. * @hide */ @Deprecated @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CARRIERLOCK) public List<CarrierIdentifier> getAllowedCarriers(int slotIndex) { if (SubscriptionManager.isValidPhoneId(slotIndex)) { CarrierRestrictionRules carrierRestrictionRule = getCarrierRestrictionRules(); @@ -13189,6 +13818,9 @@ public class TelephonyManager { * @return {@link CarrierRestrictionRules} which contains the allowed carrier list and the * excluded carrier list with the priority between the two lists. Returns {@code null} * in case of error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CARRIERLOCK}. * @hide */ @SystemApi @@ -13257,6 +13889,8 @@ public class TelephonyManager { * status result fetched from the radio * @throws SecurityException if the caller does not have the required permission/privileges or * if the caller is not pre-registered. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @@ -13323,11 +13957,15 @@ public class TelephonyManager { * @see #resetAllCarrierActions() * @deprecated use {@link #setDataEnabledForReason(int, boolean) with * reason {@link #DATA_ENABLED_REASON_CARRIER}} instead. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @Deprecated @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public void setCarrierDataEnabled(boolean enabled) { try { setDataEnabledForReason(DATA_ENABLED_REASON_CARRIER, enabled); @@ -13351,6 +13989,8 @@ public class TelephonyManager { * @deprecated - use the APIs {@link requestRadioPowerOffForReason} and * {@link clearRadioPowerOffForReason}. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @Deprecated @@ -13470,6 +14110,9 @@ public class TelephonyManager { * * @param report control start/stop reporting network status. * @see #resetAllCarrierActions() + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -13496,6 +14139,8 @@ public class TelephonyManager { * * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -13618,6 +14263,8 @@ public class TelephonyManager { * has {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} irrespective of * the reason. * @throws IllegalStateException if the Telephony process is not currently available. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) @@ -13661,6 +14308,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#MODIFY_PHONE_STATE} * {@link android.Manifest.permission#READ_BASIC_PHONE_STATE} * @throws IllegalStateException if the Telephony process is not currently available. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, @@ -13717,6 +14366,9 @@ public class TelephonyManager { * given subId. Otherwise, applies to {@link SubscriptionManager#getDefaultSubscriptionId()} * * @return true if phone is in emergency callback mode. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @SystemApi @@ -13756,6 +14408,9 @@ public class TelephonyManager { * given subId. Otherwise, applies to {@link SubscriptionManager#getDefaultSubscriptionId()}. * * @return {@code true} if manual network selection is allowed, otherwise return {@code false}. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // No support carrier privileges (b/72967236). @RequiresPermission(anyOf = {android.Manifest.permission.READ_PRECISE_PHONE_STATE, @@ -13779,6 +14434,9 @@ public class TelephonyManager { * Get the most recent SignalStrength information reported by the modem. Due * to power saving this information may not always be current. * @return the most recent cached signal strength info from the modem + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @Nullable @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -13805,6 +14463,9 @@ public class TelephonyManager { * <LI>And possibly others.</LI> * </UL> * @return {@code true} if the overall data connection is allowed; {@code false} if not. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, @@ -13975,6 +14636,9 @@ public class TelephonyManager { * * @param enable enable(True) or disable(False) * @return returns true if successfully set. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -14004,6 +14668,9 @@ public class TelephonyManager { * <p> * Requires Permission: * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE} + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -14205,6 +14872,8 @@ public class TelephonyManager { * that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). * * @throws SecurityException if the caller does not have the required permission + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -14240,6 +14909,8 @@ public class TelephonyManager { * <p> Requires permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -14267,6 +14938,8 @@ public class TelephonyManager { * <p> Requires permission: * {@link android.Manifest.permission#READ_ACTIVE_EMERGENCY_SESSION} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) @@ -14293,6 +14966,8 @@ public class TelephonyManager { * <p> Requires permission: * {@link android.Manifest.permission#READ_ACTIVE_EMERGENCY_SESSION} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) @@ -14353,6 +15028,9 @@ public class TelephonyManager { * subscription, the key is {@link SubscriptionManager#getDefaultSubscriptionId}) and the value * as the list of {@link EmergencyNumber}; empty Map if this information is not available; * or throw a SecurityException if the caller does not have the permission. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @NonNull @@ -14409,6 +15087,8 @@ public class TelephonyManager { * as the list of {@link EmergencyNumber}; empty Map if this information is not available; * or throw a SecurityException if the caller does not have the permission. * @throws IllegalStateException if the Telephony process is not currently available. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @NonNull @@ -14477,6 +15157,8 @@ public class TelephonyManager { * @return {@code true} if the given number is an emergency number based on current locale, * SIM card(s), Android database, modem, network or defaults; {@code false} otherwise. * @throws IllegalStateException if the Telephony process is not currently available. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_CALLING) public boolean isEmergencyNumber(@NonNull String number) { @@ -14514,6 +15196,8 @@ public class TelephonyManager { * network; {@code false} if it is not; or throw an SecurityException if the caller does not * have the required permission/privileges * @throws IllegalStateException if the Telephony process is not currently available. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)} instead. * @hide @@ -14543,6 +15227,8 @@ public class TelephonyManager { * <p>Requires Permission: * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @SystemApi @@ -14694,6 +15380,9 @@ public class TelephonyManager { * @param callback Callback will be triggered once it succeeds or failed. * See the {@code SET_OPPORTUNISTIC_SUB_*} constants * for more details. Pass null if don't care about the result. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public void setPreferredOpportunisticDataSubscription(int subId, boolean needValidation, @@ -14754,6 +15443,8 @@ public class TelephonyManager { * {@link SubscriptionManager#DEFAULT_SUBSCRIPTION_ID} if there are no preferred * subscription id * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresPermission(anyOf = { android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, @@ -14793,6 +15484,8 @@ public class TelephonyManager { * @param executor The executor of where the callback will execute. * @param callback Callback will be triggered once it succeeds or failed. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) @@ -14853,10 +15546,13 @@ public class TelephonyManager { * @param enable whether to enable or disable the modem stack. * @return whether the operation is successful. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) public boolean enableModemForSlot(int slotIndex, boolean enable) { boolean ret = false; try { @@ -14879,10 +15575,14 @@ public class TelephonyManager { * {@link #hasCarrierPrivileges()}). * * @param slotIndex which slot it's checking. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(anyOf = {android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE}) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY) public boolean isModemEnabledForSlot(int slotIndex) { try { ITelephony telephony = getITelephony(); @@ -14945,6 +15645,8 @@ public class TelephonyManager { * @param isMultiSimCarrierRestricted true if usage of multiple SIMs is restricted, false * otherwise. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CARRIERLOCK}. * @hide */ @SystemApi @@ -15000,6 +15702,9 @@ public class TelephonyManager { * {@link #MULTISIM_NOT_SUPPORTED_BY_HARDWARE} if the device does not support multiple SIMs. * {@link #MULTISIM_NOT_SUPPORTED_BY_CARRIER} in the device supports multiple SIMs, but the * functionality is restricted by the carrier. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @@ -15031,6 +15736,8 @@ public class TelephonyManager { * * @param numOfSims number of live SIMs we want to switch to * @throws android.os.RemoteException + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -15058,6 +15765,9 @@ public class TelephonyManager { * * @return {@code true} if reboot will be triggered after making changes to modem * configurations, otherwise return {@code false}. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. */ @RequiresPermission(Manifest.permission.READ_PHONE_STATE) @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) @@ -15220,6 +15930,8 @@ public class TelephonyManager { * {@link #CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED}, or * {@link #CARRIER_PRIVILEGE_STATUS_ERROR_LOADING_RULES} * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -15334,6 +16046,8 @@ public class TelephonyManager { * @param apnType Value indicating the apn type. Apn types are defined in {@link ApnSetting}. * @return whether data is enabled for a apn type. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @SystemApi @@ -15356,6 +16070,8 @@ public class TelephonyManager { * Whether an APN type is metered or not. It will be evaluated with the subId associated * with the TelephonyManager instance. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @SystemApi @@ -15385,6 +16101,9 @@ public class TelephonyManager { * @param executor The executor to execute the callback on * @param callback The callback that gets invoked when the radio responds to the request. Called * with {@code true} if the request succeeded, {@code false} otherwise. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -15403,6 +16122,9 @@ public class TelephonyManager { * Same as {@link #setSystemSelectionChannels(List, Executor, Consumer<Boolean>)}, but to be * used when the caller does not need feedback on the results of the operation. * @param specifiers which bands to scan. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -15450,6 +16172,8 @@ public class TelephonyManager { * @return a list of {@link RadioAccessSpecifier}, or an empty list if no bands are specified. * @throws IllegalStateException if the Telephony process is not currently available. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -15478,6 +16202,8 @@ public class TelephonyManager { * @return {@code true} if input mccmnc and mvno matches with data from sim operator. * {@code false} otherwise. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * {@hide} */ @SystemApi @@ -15568,6 +16294,8 @@ public class TelephonyManager { * {@link CallForwardingInfo#REASON_UNCONDITIONAL}, {@link CallForwardingInfo#REASON_BUSY}, * {@link CallForwardingInfo#REASON_NO_REPLY}, {@link CallForwardingInfo#REASON_NOT_REACHABLE}, * {@link CallForwardingInfo#REASON_ALL}, or {@link CallForwardingInfo#REASON_ALL_CONDITIONAL} + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * * @hide */ @@ -15645,6 +16373,8 @@ public class TelephonyManager { * <li>{@link CallForwardingInfo#getTimeoutSeconds()} returns a non-positive value when * enabling call forwarding</li> * </ul> + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -15769,6 +16499,9 @@ public class TelephonyManager { * <li>{@link #CALL_WAITING_STATUS_NOT_SUPPORTED}}</li> * <li>{@link #CALL_WAITING_STATUS_FDN_CHECK_FAILURE}}</li> * </ul> + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @SystemApi @@ -15819,6 +16552,9 @@ public class TelephonyManager { * {@link #CALL_WAITING_STATUS_NOT_SUPPORTED} or * {@link #CALL_WAITING_STATUS_UNKNOWN_ERROR} or * {@link #CALL_WAITING_STATUS_FDN_CHECK_FAILURE} if it failed. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_CALLING}. * @hide */ @SystemApi @@ -15919,6 +16655,9 @@ public class TelephonyManager { * * @param policy The data policy to enable. * @param enabled Whether to enable or disable the policy. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @SystemApi @@ -15940,6 +16679,9 @@ public class TelephonyManager { * * @param policy The data policy that you want the status for. * @return {@code true} if enabled, {@code false} otherwise. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @hide */ @SystemApi @@ -15975,6 +16717,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE} * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @WorkerThread @@ -16009,6 +16753,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -16051,6 +16797,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -16199,6 +16947,8 @@ public class TelephonyManager { * </ol> * @return operation result. * @throws IllegalStateException if the Telephony process is not currently available. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -16233,6 +16983,8 @@ public class TelephonyManager { * connectivity is active. It means the device is allowed to connect to both primary and * secondary cell. * @throws IllegalStateException if the Telephony process is not currently available. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -16470,6 +17222,8 @@ public class TelephonyManager { * * @throws IllegalStateException if the Telephony process is not currently available. * @throws SecurityException if the caller doesn't have the permission. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @@ -16586,6 +17340,9 @@ public class TelephonyManager { * * @param capability the name of the capability to check for * @return the availability of the capability + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_RADIO_ACCESS) public boolean isRadioInterfaceCapabilitySupported( @@ -16705,6 +17462,8 @@ public class TelephonyManager { * @throws IllegalArgumentException if the thermalMitigationRequest had invalid parameters or * if the device's modem does not support data throttling. * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. * @hide */ @SystemApi @@ -17037,6 +17796,9 @@ public class TelephonyManager { * contain the GBA Ks_NAF/Ks_ext_NAF when available. If the NAF keys are * available and valid at the time of call and bootstrapping is not requested, * then the callback shall be invoked with the available keys. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @@ -17135,6 +17897,8 @@ public class TelephonyManager { * @param request the SignalStrengthUpdateRequest to be set into the System * * @throws IllegalStateException if a new request is set with same subId from the same caller + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -17165,6 +17929,9 @@ public class TelephonyManager { * @see #setSignalStrengthUpdateRequest(SignalStrengthUpdateRequest) * * @param request the SignalStrengthUpdateRequest to be cleared from the System + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @@ -17188,10 +17955,14 @@ public class TelephonyManager { * @return the PhoneCapability which describes the data connection capability of modem. * It's used to evaluate possible phone config change, for example from single * SIM device to multi-SIM device. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public @NonNull PhoneCapability getPhoneCapability() { try { ITelephony telephony = getITelephony(); @@ -17256,11 +18027,15 @@ public class TelephonyManager { * at least one SIM card for which the user needs to manually enter the PIN * code after the reboot. {@link #PREPARE_UNATTENDED_REBOOT_ERROR} in case * of error. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.REBOOT) @PrepareUnattendedRebootResult + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION) public int prepareForUnattendedReboot() { try { ITelephony service = getITelephony(); @@ -17363,6 +18138,9 @@ public class TelephonyManager { * * @param executor the executor on which callback will be invoked. * @param callback a callback to receive the current slicing configuration. + * + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_RADIO_ACCESS}. */ @RequiresFeature( enforcement = "android.telephony.TelephonyManager#isRadioInterfaceCapabilitySupported", @@ -17444,8 +18222,11 @@ public class TelephonyManager { * @param capability The premium capability to check. * @return Whether the given premium capability is available to purchase. * @throws SecurityException if the caller does not hold permission READ_BASIC_PHONE_STATE. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. */ @RequiresPermission(android.Manifest.permission.READ_BASIC_PHONE_STATE) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public boolean isPremiumCapabilityAvailableForPurchase(@PremiumCapability int capability) { try { ITelephony telephony = getITelephony(); @@ -17685,10 +18466,13 @@ public class TelephonyManager { * @param callback The result of the purchase request. * @throws SecurityException if the caller does not hold permissions * READ_BASIC_PHONE_STATE or INTERNET. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_DATA}. * @see #isPremiumCapabilityAvailableForPurchase(int) to check whether the capability is valid. */ @RequiresPermission(allOf = {android.Manifest.permission.READ_BASIC_PHONE_STATE, android.Manifest.permission.INTERNET}) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA) public void purchasePremiumCapability(@PremiumCapability int capability, @NonNull @CallbackExecutor Executor executor, @NonNull @PurchasePremiumCapabilityResult Consumer<Integer> callback) { @@ -18142,10 +18926,14 @@ public class TelephonyManager { * Get current cell broadcast message identifier ranges. * * @throws SecurityException if the caller does not have the required permission + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_MESSAGING}. + * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_CELL_BROADCASTS) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING) @NonNull public List<CellBroadcastIdRange> getCellBroadcastIdRanges() { try { @@ -18299,10 +19087,13 @@ public class TelephonyManager { * the result when the operation completes. * @throws SecurityException if the caller does not have the required permission * @throws IllegalArgumentException when the ranges are invalid. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_MESSAGING}. * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_CELL_BROADCASTS) + @RequiresFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING) public void setCellBroadcastIdRanges(@NonNull List<CellBroadcastIdRange> ranges, @NonNull @CallbackExecutor Executor executor, @NonNull Consumer<Integer> callback) { @@ -18378,7 +19169,8 @@ public class TelephonyManager { * </ul> * * @return Primary IMEI of type string - * @throws UnsupportedOperationException if the radio doesn't support this feature. + * @throws UnsupportedOperationException If the device does not have + * {@link PackageManager#FEATURE_TELEPHONY_GSM}. * @throws SecurityException if the caller does not have the required permission/privileges */ @NonNull |