diff options
Diffstat (limited to 'telephony/java/android')
11 files changed, 443 insertions, 11 deletions
diff --git a/telephony/java/android/service/carrier/CarrierIdentifier.java b/telephony/java/android/service/carrier/CarrierIdentifier.java index bc0f909e1331..c6b9ea200382 100644 --- a/telephony/java/android/service/carrier/CarrierIdentifier.java +++ b/telephony/java/android/service/carrier/CarrierIdentifier.java @@ -55,12 +55,13 @@ public class CarrierIdentifier implements Parcelable { private @Nullable String mImsi; private @Nullable String mGid1; private @Nullable String mGid2; + private @Nullable String mIccid; private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID; private int mSpecificCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID; public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, @Nullable String imsi, @Nullable String gid1, @Nullable String gid2) { - this(mcc, mnc, spn, imsi, gid1, gid2, TelephonyManager.UNKNOWN_CARRIER_ID, + this(mcc, mnc, spn, imsi, gid1, gid2, null, TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID); } @@ -79,16 +80,31 @@ public class CarrierIdentifier implements Parcelable { public CarrierIdentifier(@NonNull String mcc, @NonNull String mnc, @Nullable String spn, @Nullable String imsi, @Nullable String gid1, @Nullable String gid2, int carrierid, int specificCarrierId) { + this(mcc, mnc, spn, imsi, gid1, gid2, null, carrierid, specificCarrierId); + } + + /** @hide */ + public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, + @Nullable String imsi, @Nullable String gid1, @Nullable String gid2, + @Nullable String iccid, int carrierid, int specificCarrierId) { mMcc = mcc; mMnc = mnc; mSpn = spn; mImsi = imsi; mGid1 = gid1; mGid2 = gid2; + mIccid = iccid; mCarrierId = carrierid; mSpecificCarrierId = specificCarrierId; } + /** @hide */ + public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, @Nullable String imsi, + @Nullable String gid1, @Nullable String gid2I, @Nullable String iccid) { + this(mcc, mnc, spn, imsi, gid1, gid2I); + mIccid = iccid; + } + /** * Creates a carrier identifier instance. * @@ -113,6 +129,7 @@ public class CarrierIdentifier implements Parcelable { mGid2 = gid2; mSpn = null; mImsi = null; + mIccid = null; } /** @hide */ @@ -154,6 +171,13 @@ public class CarrierIdentifier implements Parcelable { return mGid2; } + /** Get the ICCID. + * @hide */ + @Nullable + public String getIccid() { + return mIccid; + } + /** * Returns the carrier id. * @see TelephonyManager#getSimCarrierId() @@ -192,13 +216,14 @@ public class CarrierIdentifier implements Parcelable { && Objects.equals(mImsi, that.mImsi) && Objects.equals(mGid1, that.mGid1) && Objects.equals(mGid2, that.mGid2) + && Objects.equals(mIccid, that.mIccid) && Objects.equals(mCarrierId, that.mCarrierId) && Objects.equals(mSpecificCarrierId, that.mSpecificCarrierId); } @Override public int hashCode(){ - return Objects.hash(mMcc, mMnc, mSpn, mImsi, mGid1, mGid2, mCarrierId, mSpecificCarrierId); + return Objects.hash(mMcc, mMnc, mSpn, mImsi, mGid1, mGid2, mIccid, mCarrierId, mSpecificCarrierId); } @Override @@ -214,6 +239,7 @@ public class CarrierIdentifier implements Parcelable { out.writeString(mImsi); out.writeString(mGid1); out.writeString(mGid2); + out.writeString(mIccid); out.writeInt(mCarrierId); out.writeInt(mSpecificCarrierId); } @@ -227,6 +253,7 @@ public class CarrierIdentifier implements Parcelable { + ",imsi=" + Rlog.pii(false, mImsi) + ",gid1=" + mGid1 + ",gid2=" + mGid2 + + ",iccid=" + mIccid + ",carrierid=" + mCarrierId + ",specificCarrierId=" + mSpecificCarrierId + "}"; @@ -240,6 +267,7 @@ public class CarrierIdentifier implements Parcelable { mImsi = in.readString(); mGid1 = in.readString(); mGid2 = in.readString(); + mIccid = in.readString(); mCarrierId = in.readInt(); mSpecificCarrierId = in.readInt(); } @@ -251,5 +279,6 @@ public class CarrierIdentifier implements Parcelable { int IMSI_PREFIX = 2; int GID1 = 3; int GID2 = 4; + int ICCID = 5; } } diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java index 1d7a4761dec6..ac50d101feb9 100644 --- a/telephony/java/android/telephony/AccessNetworkConstants.java +++ b/telephony/java/android/telephony/AccessNetworkConstants.java @@ -19,6 +19,7 @@ package android.telephony; import android.annotation.IntDef; import android.annotation.SystemApi; import android.hardware.radio.V1_5.AccessNetwork; +import android.hardware.radio.V1_5.RadioAccessNetworks; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -108,6 +109,28 @@ public final class AccessNetworkConstants { default: return Integer.toString(type); } } + + /** + * Converts from RadioAccessNetworks in HAL to AccessNetworkType in frameworks. + * @hide + */ + public static int convertRanToAnt(int ran) { + switch (ran) { + case RadioAccessNetworks.GERAN: + return AccessNetworkType.GERAN; + case RadioAccessNetworks.UTRAN: + return AccessNetworkType.UTRAN; + case RadioAccessNetworks.EUTRAN: + return AccessNetworkType.EUTRAN; + case RadioAccessNetworks.NGRAN: + return AccessNetworkType.NGRAN; + case RadioAccessNetworks.CDMA2000: + return AccessNetworkType.CDMA2000; + case RadioAccessNetworks.UNKNOWN: + default: + return AccessNetworkType.UNKNOWN; + } + } } /** diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 72ad23b8edb1..aa61229ecc24 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -771,6 +771,14 @@ public class CarrierConfigManager { public static final String KEY_VILTE_DATA_IS_METERED_BOOL = "vilte_data_is_metered_bool"; /** + * Flag indicating whether we should reset UT capability or not for IMS deregistration + * and for IMS feature state not ready + * @hide + */ + public static final String KEY_IGNORE_RESET_UT_CAPABILITY_BOOL = + "ignore_reset_ut_capability_bool"; + + /** * Flag specifying whether WFC over IMS should be available for carrier: independent of * carrier provisioning. If false: hard disabled. If true: then depends on carrier * provisioning, availability etc. @@ -806,6 +814,18 @@ public class CarrierConfigManager { "carrier_wfc_supports_wifi_only_bool"; /** + * Flag specifying whether WFC over IMS supports the "ims preferred" option. If false, the wifi + * calling settings will not include an option for "ims preferred". If true, the wifi calling + * settings will include an option for "ims preferred" + * <p> + * By default, it is assumed that WFC does not support "ims preferred". + * @hide + */ + public static final String KEY_CARRIER_WFC_SUPPORTS_IMS_PREFERRED_BOOL = + "carrier_wfc_supports_ims_preferred_bool"; + + + /** * Default mode for WFC over IMS on home network: * <ul> * <li>0: Wi-Fi only @@ -935,6 +955,13 @@ public class CarrierConfigManager { public static final String KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL = "carrier_volte_tty_supported_bool"; + /** + * Flag indicating whether VT tty is supported + * @hide + */ + public static final String KEY_CARRIER_VT_TTY_SUPPORT_BOOL = + "carrier_vt_tty_support_bool"; + /** * Flag specifying whether IMS service can be turned off. If false then the service will not be * turned-off completely, but individual features can be disabled. @@ -1449,6 +1476,15 @@ public class CarrierConfigManager { public static final String KEY_HIDE_ENHANCED_4G_LTE_BOOL = "hide_enhanced_4g_lte_bool"; /** + * Determines whether the Enabled 5G toggle will be shown in the settings. When this + * option is {@code true}, the toggle will be hidden regardless of whether the device and + * carrier supports 5G or not. + * + * @hide + */ + public static final String KEY_HIDE_ENABLED_5G_BOOL = "hide_enabled_5g_bool"; + + /** * Sets the default state for the "Enhanced 4G LTE" or "Advanced Calling" mode toggle set by the * user. When this is {@code true}, this mode by default is on, otherwise if {@code false}, * this mode by default is off. @@ -1897,6 +1933,7 @@ public class CarrierConfigManager { public static final String KEY_SHOW_PRECISE_FAILED_CAUSE_BOOL = "show_precise_failed_cause_bool"; + /** * A list of carrier nr availability is used to determine whether the carrier enable the * non-standalone (NSA) mode of 5G NR, standalone (SA) mode of 5G NR @@ -1914,6 +1951,12 @@ public class CarrierConfigManager { "carrier_nr_availabilities_int_array"; /** + * Flag specifying whether CDMA call waiting and call forwarding are enabled + * @hide + */ + public static final String KEY_CDMA_CW_CF_ENABLED_BOOL = "cdma_cw_cf_enabled_bool"; + + /** * Boolean to decide whether LTE is enabled. */ public static final String KEY_LTE_ENABLED_BOOL = "lte_enabled_bool"; @@ -1940,8 +1983,8 @@ public class CarrierConfigManager { public static final String KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING = "carrier_settings_activity_component_name_string"; - // These variables are used by the MMS service and exposed through another API, - // SmsManager. The variable names and string values are copied from there. + // These variables are used by the MMS service and exposed through another API, {@link + // SmsManager}. The variable names and string values are copied from there. public static final String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled"; public static final String KEY_MMS_ALLOW_ATTACH_AUDIO_BOOL = "allowAttachAudio"; public static final String KEY_MMS_APPEND_TRANSACTION_ID_BOOL = "enabledTransID"; @@ -5065,6 +5108,45 @@ public class CarrierConfigManager { public static final String KEY_UNTHROTTLE_DATA_RETRY_WHEN_TAC_CHANGES_BOOL = "unthrottle_data_retry_when_tac_changes_bool"; + /** + * Flag indicating whether carrier supports multianchor conference. + * In multianchor conference, a participant of a conference can add + * other participants to the call using merge button thereby resulting + * in a conference with multi anchors. + * @hide + */ + public static final String KEY_CARRIER_SUPPORTS_MULTIANCHOR_CONFERENCE = + "carrier_supports_multianchor_conference"; + + /** + * String array of APN configurations of same MVNO type GID. + * The entries should be of form "GID data:all supported apn types:devicecapability:apnname". + * example: 52FF:default,mms:SA:nrphone + * + * @hide + */ + public static final String KEY_MULTI_APN_ARRAY_FOR_SAME_GID = "multi_apn_array_for_same_gid"; + + /** + * Flag indicating if APN filtering required. + * + * @hide + */ + public static final String KEY_REQUIRE_APN_FILTERING_WITH_RADIO_CAPABILITY = + "require_apn_filtering_with_radio_capability_bool"; + + /** + * Determines whether carrier supports Sms Callback Mode. + * When {@code true}, modem can enter/exit SMS callback mode (SCBM) after sending e911 SMS. + * When user tries to make a following e911 call and modem is in SCBM, the same sub will be + * selected to place the e911 call over IMS. + * When {@code false}, follows the current slot selection logic to place the e911 call. + * + * @hide + */ + public static final String KEY_USE_SMS_CALLBACK_MODE_BOOL = + "use_sms_callback_mode_bool"; + /** The default value for every variable. */ private final static PersistableBundle sDefaults; @@ -5098,9 +5180,11 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_CONFIG_TELEPHONY_USE_OWN_NUMBER_FOR_VOICEMAIL_BOOL, false); sDefaults.putBoolean(KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS, true); sDefaults.putBoolean(KEY_VILTE_DATA_IS_METERED_BOOL, true); + sDefaults.putBoolean(KEY_IGNORE_RESET_UT_CAPABILITY_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, false); + sDefaults.putBoolean(KEY_CARRIER_WFC_SUPPORTS_IMS_PREFERRED_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_PROMOTE_WFC_ON_CALL_FAIL_BOOL, false); @@ -5113,6 +5197,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, true); + sDefaults.putBoolean(KEY_CARRIER_VT_TTY_SUPPORT_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL, true); sDefaults.putBoolean(KEY_CARRIER_IMS_GBA_REQUIRED_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL, false); @@ -5138,7 +5223,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_HIDE_SIM_LOCK_SETTINGS_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_VOLTE_PROVISIONED_BOOL, false); - sDefaults.putBoolean(KEY_CALL_BARRING_VISIBILITY_BOOL, false); + sDefaults.putBoolean(KEY_CALL_BARRING_VISIBILITY_BOOL, true); sDefaults.putBoolean(KEY_CALL_BARRING_SUPPORTS_PASSWORD_CHANGE_BOOL, true); sDefaults.putBoolean(KEY_CALL_BARRING_SUPPORTS_DEACTIVATE_ALL_BOOL, true); sDefaults.putInt(KEY_CALL_BARRING_DEFAULT_SERVICE_CLASS_INT, SERVICE_CLASS_VOICE); @@ -5218,6 +5303,7 @@ public class CarrierConfigManager { new String[]{"default", "mms", "dun", "supl"}); sDefaults.putStringArray(KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, new String[]{"default", "mms", "dun", "supl"}); + sDefaults.putBoolean(KEY_CDMA_CW_CF_ENABLED_BOOL, false); sDefaults.putStringArray(KEY_CARRIER_WWAN_DISALLOWED_APN_TYPES_STRING_ARRAY, new String[]{""}); sDefaults.putStringArray(KEY_CARRIER_WLAN_DISALLOWED_APN_TYPES_STRING_ARRAY, @@ -5263,6 +5349,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL, true); sDefaults.putBoolean(KEY_EDITABLE_ENHANCED_4G_LTE_BOOL, true); sDefaults.putBoolean(KEY_HIDE_ENHANCED_4G_LTE_BOOL, false); + sDefaults.putBoolean(KEY_HIDE_ENABLED_5G_BOOL, true); sDefaults.putBoolean(KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL, true); sDefaults.putBoolean(KEY_HIDE_IMS_APN_BOOL, false); sDefaults.putBoolean(KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL, false); @@ -5653,6 +5740,27 @@ public class CarrierConfigManager { sDefaults.putString(KEY_CARRIER_PROVISIONING_APP_STRING, ""); sDefaults.putBoolean(KEY_DISPLAY_NO_DATA_NOTIFICATION_ON_PERMANENT_FAILURE_BOOL, false); sDefaults.putBoolean(KEY_UNTHROTTLE_DATA_RETRY_WHEN_TAC_CHANGES_BOOL, false); + sDefaults.putBoolean(KEY_CARRIER_SUPPORTS_MULTIANCHOR_CONFERENCE, false); + sDefaults.putStringArray(KEY_MULTI_APN_ARRAY_FOR_SAME_GID, new String[] { + "52FF:mms,supl,hipri,default,fota:SA:nrphone", + "52FF:mms,supl,hipri,default,fota:NSA:nxtgenphone", + "52FF:mms,supl,hipri,default,fota:LTE:nxtgenphone", + "52FF:mms,supl,hipri,default,fota:TD_SCDMA:nxtgenphone", + "52FF:mms,supl,hipri,default,fota:UMTS:nxtgenphone", + "52FF:mms,supl,hipri,default,fota:GSM:nxtgenphone", + "52FF:mms,supl,hipri,default,fota:HDR:nxtgenphone", + "52FF:mms,supl,hipri,default,fota:1xRTT:nxtgenphone", + "53FF:mms,supl,hipri,default,fota:SA:enhancedphone", + "53FF:mms,supl,hipri,default,fota:NSA:enhancedphone", + "53FF:mms,supl,hipri,default,fota:LTE:nxtgenphone", + "53FF:mms,supl,hipri,default,fota:TD_SCDMA:nxtgenphone", + "53FF:mms,supl,hipri,default,fota:UMTS:nxtgenphone", + "53FF:mms,supl,hipri,default,fota:GSM:nxtgenphone", + "53FF:mms,supl,hipri,default,fota:HDR:nxtgenphone", + "53FF:mms,supl,hipri,default,fota:1xRTT:nxtgenphone", + }); + sDefaults.putBoolean(KEY_REQUIRE_APN_FILTERING_WITH_RADIO_CAPABILITY, false); + sDefaults.putBoolean(KEY_USE_SMS_CALLBACK_MODE_BOOL, false); } /** @@ -5903,7 +6011,7 @@ public class CarrierConfigManager { return; } loader.updateConfigForPhoneId(phoneId, simState); - } catch (RemoteException ex) { + } catch (RemoteException | IllegalArgumentException ex) { Rlog.e(TAG, "Error updating config for phoneId=" + phoneId + ": " + ex.toString()); } } diff --git a/telephony/java/android/telephony/DisconnectCause.java b/telephony/java/android/telephony/DisconnectCause.java index 2704418935d9..4a65d0010076 100644 --- a/telephony/java/android/telephony/DisconnectCause.java +++ b/telephony/java/android/telephony/DisconnectCause.java @@ -361,12 +361,124 @@ public final class DisconnectCause { public static final int INCOMING_AUTO_REJECTED = 81; + /** @hide */ + public static final int INCOMING_CALLS_BARRED_WITHIN_CUG = 82; + /** @hide */ + public static final int BEARER_CAPABILITY_UNAVAILABLE = 83; + /** @hide */ + public static final int SERVICE_OPTION_NOT_AVAILABLE = 84; + /** @hide */ + public static final int BEARER_SERVICE_NOT_IMPLEMENTED = 85; + /** @hide */ + public static final int REQUESTED_FACILITY_NOT_IMPLEMENTED = 86; + /** @hide */ + public static final int ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 87; + /** @hide */ + public static final int SERVICE_OR_OPTION_NOT_IMPLEMENTED = 88; + /** @hide */ + public static final int INVALID_TRANSACTION_IDENTIFIER = 89; + /** @hide */ + public static final int USER_NOT_MEMBER_OF_CUG = 90; + /** @hide */ + public static final int INCOMPATIBLE_DESTINATION = 91; + /** @hide */ + public static final int INVALID_TRANSIT_NW_SELECTION = 92; + /** @hide */ + public static final int SEMANTICALLY_INCORRECT_MESSAGE = 93; + /** @hide */ + public static final int INVALID_MANDATORY_INFORMATION = 94; + /** @hide */ + public static final int MESSAGE_TYPE_NON_IMPLEMENTED = 95; + /** @hide */ + public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 96; + /** @hide */ + public static final int INFORMATION_ELEMENT_NON_EXISTENT = 97; + /** @hide */ + public static final int CONDITIONAL_IE_ERROR = 98; + /** @hide */ + public static final int MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 99; + /** @hide */ + public static final int RECOVERY_ON_TIMER_EXPIRED = 100; + /** @hide */ + public static final int PROTOCOL_ERROR_UNSPECIFIED = 101; + /** @hide */ + public static final int INTERWORKING_UNSPECIFIED = 102; + /** @hide */ + public static final int LOCAL_LOW_BATTERY = 103; + /** @hide */ + public static final int NO_CIRCUIT_AVAIL = 104; + /** @hide */ + public static final int NO_ROUTE_TO_DESTINATION = 105; + /** @hide */ + public static final int OPERATOR_DETERMINED_BARRING = 106; + /** @hide */ + public static final int CALL_FAIL_NO_USER_RESPONDING = 107; + /** @hide */ + public static final int CALL_FAIL_NO_ANSWER_FROM_USER = 108; + /** @hide */ + public static final int CALL_FAIL_DESTINATION_OUT_OF_ORDER = 109; + /** @hide */ + public static final int BEARER_CAPABILITY_NOT_AUTHORIZED = 110; + /** @hide */ + public static final int CHANNEL_UNACCEPTABLE = 111; + /** @hide */ + public static final int CALL_REJECTED = 112; + /** @hide */ + public static final int NUMBER_CHANGED = 113; + /** @hide */ + public static final int PREEMPTION = 114; + /** @hide */ + public static final int FACILITY_REJECTED = 115; + /** @hide */ + public static final int RESP_TO_STATUS_ENQUIRY = 116; + /** @hide */ + public static final int NETWORK_OUT_OF_ORDER = 117; + /** @hide */ + public static final int TEMPORARY_FAILURE = 118; + /** @hide */ + public static final int SWITCHING_EQUIPMENT_CONGESTION = 119; + /** @hide */ + public static final int ACCESS_INFORMATION_DISCARDED = 120; + /** @hide */ + public static final int REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE = 121; + /** @hide */ + public static final int RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 122; + /** @hide */ + public static final int QOS_UNAVAILABLE = 123; + /** @hide */ + public static final int REQUESTED_FACILITY_NOT_SUBSCRIBED = 124; + + /** + * call failed due to LTE to 3G/2G handover not feasible + * @hide + */ + public static final int HO_NOT_FEASIBLE = 125; + /** @hide */ + public static final int NON_SELECTED_USER_CLEARING = 126; + //********************************************************************************************* // When adding a disconnect type: - // 1) Update toString() with the newly added disconnect type. - // 2) Update android.telecom.DisconnectCauseUtil with any mappings to a telecom.DisconnectCause. + // 1) Please assign the new type the next id value below. + // 2) Increment the next id value below to a new value. + // 3) Update MAXIMUM_VALID_VALUE to the new disconnect type. + // 4) Update toString() with the newly added disconnect type. + // 5) Update android.telecom.DisconnectCauseUtil with any mappings to a telecom.DisconnectCause. + // + // NextId: 123 //********************************************************************************************* + /** + * Smallest valid value for call disconnect codes. + * @hide + */ + public static final int MINIMUM_VALID_VALUE = NOT_DISCONNECTED; + + /** + * Largest valid value for call disconnect codes. + * @hide + */ + public static final int MAXIMUM_VALID_VALUE = NON_SELECTED_USER_CLEARING; + /** Private constructor to avoid class instantiation. */ private DisconnectCause() { // Do nothing. @@ -515,6 +627,32 @@ public final class DisconnectCause { return "EMERGENCY_TEMP_FAILURE"; case EMERGENCY_PERM_FAILURE: return "EMERGENCY_PERM_FAILURE"; + case NO_CIRCUIT_AVAIL: + return "NO_CIRCUIT_AVAIL"; + case NO_ROUTE_TO_DESTINATION: + return "NO_ROUTE_TO_DESTINATION"; + case OPERATOR_DETERMINED_BARRING: + return "OPERATOR_DETERMINED_BARRING"; + case CALL_FAIL_NO_USER_RESPONDING: + return "CALL_FAIL_NO_USER_RESPONDING"; + case CALL_FAIL_NO_ANSWER_FROM_USER: + return "CALL_FAIL_NO_ANSWER_FROM_USER"; + case CALL_FAIL_DESTINATION_OUT_OF_ORDER: + return "CALL_FAIL_DESTINATION_OUT_OF_ORDER"; + case BEARER_CAPABILITY_NOT_AUTHORIZED: + return "BEARER_CAPABILITY_NOT_AUTHORIZED"; + case CHANNEL_UNACCEPTABLE: + return "CHANNEL_UNACCEPTABLE"; + case CALL_REJECTED: + return "CALL_REJECTED"; + case NUMBER_CHANGED: + return "NUMBER_CHANGED"; + case PREEMPTION: + return "PREEMPTION"; + case FACILITY_REJECTED: + return "FACILITY_REJECTED"; + case RESP_TO_STATUS_ENQUIRY: + return "RESP_TO_STATUS_ENQUIRY"; case NORMAL_UNSPECIFIED: return "NORMAL_UNSPECIFIED"; case IMS_SIP_ALTERNATE_EMERGENCY_CALL: @@ -539,6 +677,70 @@ public final class DisconnectCause { return "OUTGOING_EMERGENCY_CALL_PLACED"; case INCOMING_AUTO_REJECTED: return "INCOMING_AUTO_REJECTED"; + case NETWORK_OUT_OF_ORDER: + return "NETWORK_OUT_OF_ORDER"; + case TEMPORARY_FAILURE: + return "TEMPORARY_FAILURE"; + case SWITCHING_EQUIPMENT_CONGESTION: + return "SWITCHING_EQUIPMENT_CONGESTION"; + case ACCESS_INFORMATION_DISCARDED: + return "ACCESS_INFORMATION_DISCARDED"; + case REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE: + return "REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE"; + case RESOURCES_UNAVAILABLE_OR_UNSPECIFIED: + return "RESOURCES_UNAVAILABLE_OR_UNSPECIFIED"; + case QOS_UNAVAILABLE: + return "QOS_UNAVAILABLE"; + case REQUESTED_FACILITY_NOT_SUBSCRIBED: + return "REQUESTED_FACILITY_NOT_SUBSCRIBED"; + case INCOMING_CALLS_BARRED_WITHIN_CUG: + return "INCOMING_CALLS_BARRED_WITHIN_CUG"; + case BEARER_CAPABILITY_UNAVAILABLE: + return "BEARER_CAPABILITY_UNAVAILABLE"; + case SERVICE_OPTION_NOT_AVAILABLE: + return "SERVICE_OPTION_NOT_AVAILABLE"; + case BEARER_SERVICE_NOT_IMPLEMENTED: + return "BEARER_SERVICE_NOT_IMPLEMENTED"; + case REQUESTED_FACILITY_NOT_IMPLEMENTED: + return "REQUESTED_FACILITY_NOT_IMPLEMENTED"; + case ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE: + return "ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE"; + case SERVICE_OR_OPTION_NOT_IMPLEMENTED: + return "SERVICE_OR_OPTION_NOT_IMPLEMENTED"; + case INVALID_TRANSACTION_IDENTIFIER: + return "INVALID_TRANSACTION_IDENTIFIER"; + case USER_NOT_MEMBER_OF_CUG: + return "USER_NOT_MEMBER_OF_CUG"; + case INCOMPATIBLE_DESTINATION: + return "INCOMPATIBLE_DESTINATION"; + case INVALID_TRANSIT_NW_SELECTION: + return "INVALID_TRANSIT_NW_SELECTION"; + case SEMANTICALLY_INCORRECT_MESSAGE: + return "SEMANTICALLY_INCORRECT_MESSAGE"; + case INVALID_MANDATORY_INFORMATION: + return "INVALID_MANDATORY_INFORMATION"; + case MESSAGE_TYPE_NON_IMPLEMENTED: + return "MESSAGE_TYPE_NON_IMPLEMENTED"; + case MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE: + return "MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE"; + case INFORMATION_ELEMENT_NON_EXISTENT: + return "INFORMATION_ELEMENT_NON_EXISTENT"; + case CONDITIONAL_IE_ERROR: + return "CONDITIONAL_IE_ERROR"; + case MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE: + return "MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE"; + case RECOVERY_ON_TIMER_EXPIRED: + return "RECOVERY_ON_TIMER_EXPIRED"; + case PROTOCOL_ERROR_UNSPECIFIED: + return "PROTOCOL_ERROR_UNSPECIFIED"; + case INTERWORKING_UNSPECIFIED: + return "INTERWORKING_UNSPECIFIED"; + case LOCAL_LOW_BATTERY: + return "LOCAL_LOW_BATTERY"; + case HO_NOT_FEASIBLE: + return "HO_NOT_FEASIBLE"; + case NON_SELECTED_USER_CLEARING: + return "NON_SELECTED_USER_CLEARING"; default: return "INVALID: " + cause; } diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index d745dc215f34..5e01253b2676 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -1810,6 +1810,13 @@ public class ServiceState implements Parcelable { } /** @hide */ + public static boolean isPsTech(int radioTechnology) { + return radioTechnology == RIL_RADIO_TECHNOLOGY_LTE || + radioTechnology == RIL_RADIO_TECHNOLOGY_LTE_CA || + radioTechnology == RIL_RADIO_TECHNOLOGY_NR; + } + + /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public static boolean bearerBitmapHasCdma(int networkTypeBitmask) { return (RIL_RADIO_CDMA_TECHNOLOGY_BITMASK diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java index 5171cf9dcea7..e9796083a270 100644 --- a/telephony/java/android/telephony/SmsManager.java +++ b/telephony/java/android/telephony/SmsManager.java @@ -461,6 +461,7 @@ public final class SmsManager { public void sendTextMessage( String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) { + android.util.SeempLog.record_str(75, destinationAddress); sendTextMessageInternal(destinationAddress, scAddress, text, sentIntent, deliveryIntent, true /* persistMessage*/, getOpPackageName(), getAttributionTag(), 0L /* messageId */); @@ -1427,6 +1428,7 @@ public final class SmsManager { public void sendDataMessage( String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { + android.util.SeempLog.record_str(73, destinationAddress); if (TextUtils.isEmpty(destinationAddress)) { throw new IllegalArgumentException("Invalid destinationAddress"); } @@ -1757,6 +1759,7 @@ public final class SmsManager { @RequiresPermission(Manifest.permission.ACCESS_MESSAGES_ON_ICC) public boolean copyMessageToIcc( @Nullable byte[] smsc, @NonNull byte[] pdu, @StatusOnIcc int status) { + android.util.SeempLog.record(79); boolean success = false; if (pdu == null) { @@ -1800,6 +1803,7 @@ public final class SmsManager { @UnsupportedAppUsage @RequiresPermission(Manifest.permission.ACCESS_MESSAGES_ON_ICC) public boolean deleteMessageFromIcc(int messageIndex) { + android.util.SeempLog.record(80); boolean success = false; try { @@ -1843,6 +1847,7 @@ public final class SmsManager { @UnsupportedAppUsage @RequiresPermission(Manifest.permission.ACCESS_MESSAGES_ON_ICC) public boolean updateMessageOnIcc(int messageIndex, int newStatus, byte[] pdu) { + android.util.SeempLog.record(81); boolean success = false; try { diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 255a61266ebf..799930c53669 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -472,6 +472,35 @@ public class TelephonyManager { } /** + * The allowed values for multi sim voice capability + * + * @hide + */ + public interface MultiSimVoiceCapability { + /** default */ + static final int UNKNOWN = 0; + /** Concurrent calls on both subscriptions are not possbile. */ + static final int DSDS = 1; + /** Concurrent calls on both subscriptions are not possible but user will have option to + * accept MT call on one subscription when there is an ongoing call on another subscription. + */ + static final int PSEUDO_DSDA = 2; + /** Concurrent calls on both subscriptions are possible */ + static final int DSDA = 3; + } + + /** + * Returns true if concurrent calls on both subscriptions are possible (ex: DSDA). + * Returns false for other cases. + */ + /** {@hide} */ + public static boolean isConcurrentCallsPossible() { + int mSimVoiceConfig = TelephonyProperties.multi_sim_voice_capability().orElse( + MultiSimVoiceCapability.UNKNOWN); + return mSimVoiceConfig == MultiSimVoiceCapability.DSDA; + } + + /** * Returns the number of phones available. * Returns 0 if none of voice, sms, data is not supported * Returns 1 for Single standby mode (Single SIM functionality). @@ -2017,6 +2046,7 @@ public class TelephonyManager { @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDeviceId(int slotIndex) { // FIXME this assumes phoneId == slotIndex + android.util.SeempLog.record_str(8, ""+slotIndex); try { IPhoneSubInfo info = getSubscriberInfoService(); if (info == null) @@ -2348,6 +2378,7 @@ public class TelephonyManager { @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public CellLocation getCellLocation() { + android.util.SeempLog.record(49); try { ITelephony telephony = getITelephony(); if (telephony == null) { @@ -2383,6 +2414,7 @@ public class TelephonyManager { @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) public List<NeighboringCellInfo> getNeighboringCellInfo() { + android.util.SeempLog.record(50); try { ITelephony telephony = getITelephony(); if (telephony == null) @@ -3830,6 +3862,7 @@ public class TelephonyManager { @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @UnsupportedAppUsage public String getSimSerialNumber(int subId) { + android.util.SeempLog.record_str(388, ""+subId); try { IPhoneSubInfo info = getSubscriberInfoService(); if (info == null) @@ -4098,6 +4131,7 @@ public class TelephonyManager { @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) public String getSubscriberId(int subId) { + android.util.SeempLog.record_str(389, ""+subId); try { IPhoneSubInfo info = getSubscriberInfoService(); if (info == null) @@ -4704,6 +4738,7 @@ public class TelephonyManager { }) @UnsupportedAppUsage public String getLine1Number(int subId) { + android.util.SeempLog.record_str(9, ""+subId); String number = null; try { ITelephony telephony = getITelephony(); diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java index be1502ad49f2..442681ee71b2 100644 --- a/telephony/java/android/telephony/data/ApnSetting.java +++ b/telephony/java/android/telephony/data/ApnSetting.java @@ -1447,8 +1447,8 @@ public class ApnSetting implements Parcelable { && !typeSameAny(this, other) && xorEqualsString(this.mProxyAddress, other.mProxyAddress) && xorEqualsInt(this.mProxyPort, other.mProxyPort) - && xorEquals(this.mProtocol, other.mProtocol) - && xorEquals(this.mRoamingProtocol, other.mRoamingProtocol) + && xorEqualsInt(this.mProtocol, other.mProtocol) + && xorEqualsInt(this.mRoamingProtocol, other.mRoamingProtocol) && Objects.equals(this.mCarrierEnabled, other.mCarrierEnabled) && Objects.equals(this.mProfileId, other.mProfileId) && Objects.equals(this.mMvnoType, other.mMvnoType) diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java index 486f74632ca2..5bfa1194962e 100644 --- a/telephony/java/android/telephony/ims/ImsCallProfile.java +++ b/telephony/java/android/telephony/ims/ImsCallProfile.java @@ -120,6 +120,11 @@ public final class ImsCallProfile implements Parcelable { * VideoShare (video RX one way) */ public static final int CALL_TYPE_VS_RX = 10; + /** + * Unknown (audio / video inactive) + * @hide + */ + public static final int CALL_TYPE_UNKNOWN = (-1); /** * Extra properties for IMS call. diff --git a/telephony/java/android/telephony/ims/ImsCallSession.java b/telephony/java/android/telephony/ims/ImsCallSession.java index 0aff99709a52..32a65660121f 100755..100644 --- a/telephony/java/android/telephony/ims/ImsCallSession.java +++ b/telephony/java/android/telephony/ims/ImsCallSession.java @@ -1307,7 +1307,9 @@ public class ImsCallSession { if (mListener != null) { if (newSession != null) { // New session created after conference - mListener.callSessionMergeComplete(new ImsCallSession(newSession)); + ImsCallSession confSession = new ImsCallSession(newSession); + confSession.mListener = mListener; + mListener.callSessionMergeComplete(confSession); } else { // Session already exists. Hence no need to pass mListener.callSessionMergeComplete(null); diff --git a/telephony/java/android/telephony/ims/stub/ImsUtImplBase.java b/telephony/java/android/telephony/ims/stub/ImsUtImplBase.java index eb3e8ed5a8e4..7694f5ee9981 100644 --- a/telephony/java/android/telephony/ims/stub/ImsUtImplBase.java +++ b/telephony/java/android/telephony/ims/stub/ImsUtImplBase.java @@ -19,6 +19,7 @@ package android.telephony.ims.stub; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.os.Bundle; import android.os.RemoteException; @@ -139,6 +140,12 @@ public class ImsUtImplBase { } @Override + public int queryCFForServiceClass(int condition, String number, int serviceClass) throws + RemoteException { + return ImsUtImplBase.this.queryCFForServiceClass(condition, number, serviceClass); + } + + @Override public int queryCallWaiting() throws RemoteException { return ImsUtImplBase.this.queryCallWaiting(); } @@ -286,6 +293,15 @@ public class ImsUtImplBase { } /** + * Retrieves the configuration of the call forward for specified service class. + */ + @SuppressLint("AcronymName") + public int queryCFForServiceClass(int condition, String number, + int serviceClass) { + return -1; + } + + /** * Retrieves the configuration of the call waiting. */ public int queryCallWaiting() { |