/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

package android.telephony.ims;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.HashMap;
import java.util.Map;
/**
 * Provides details on why an IMS call failed. Applications can use the methods in this class to
 * get local or network fault behind an IMS services failure. For example, if the code is
 * CODE_CALL_BARRED, then the call was blocked by network call barring configuration and it is not
 * the device's bug and the user can retry the call when network lift the barring.
 * Typical use case includes call backs when IMS call state changed with this class as a param
 * containing details on why IMS call changed state/failed.
 */
public final class ImsReasonInfo implements Parcelable {

    /**
     * The Reason is unspecified.
     */
    public static final int CODE_UNSPECIFIED = 0;


    // LOCAL

    // IMS -> Telephony
    /**
     * The passed argument is invalid.
     */
    public static final int CODE_LOCAL_ILLEGAL_ARGUMENT = 101;
    /**
     * The operation was invoked while in an invalid call state.
     */
    public static final int CODE_LOCAL_ILLEGAL_STATE = 102;
    /**
     * IMS service internal error
     */
    public static final int CODE_LOCAL_INTERNAL_ERROR = 103;
    /**
     * ImsService has crashed (service connection is lost).
     */
    public static final int CODE_LOCAL_IMS_SERVICE_DOWN = 106;
    /**
     * No pending incoming call exists
     */
    public static final int CODE_LOCAL_NO_PENDING_CALL = 107;
    /**
     * IMS Call ended during conference merge process
     */
    public static final int CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE = 108;

    // IMS -> Telephony
    /**
     * Service unavailable; radio power off
     */
    public static final int CODE_LOCAL_POWER_OFF = 111;
    /**
     * Service unavailable; low battery
     */
    public static final int CODE_LOCAL_LOW_BATTERY = 112;
    /**
     * Service unavailable; out of service (data service state)
     */
    public static final int CODE_LOCAL_NETWORK_NO_SERVICE = 121;
    /**
     * Service unavailable; no LTE coverage
     * (VoLTE is not supported even though IMS is registered)
     */
    public static final int CODE_LOCAL_NETWORK_NO_LTE_COVERAGE = 122;
    /**
     * Service unavailable; located in roaming area
     */
    public static final int CODE_LOCAL_NETWORK_ROAMING = 123;
    /**
     * Service unavailable; IP changed
     */
    public static final int CODE_LOCAL_NETWORK_IP_CHANGED = 124;
    /**
     * Service unavailable; for an unspecified reason
     */
    public static final int CODE_LOCAL_SERVICE_UNAVAILABLE = 131;
    /**
     * Service unavailable; IMS is not registered
     */
    public static final int CODE_LOCAL_NOT_REGISTERED = 132;

    // IMS <-> Telephony
    /**
     * Maximum number of simultaneous calls exceeded
     */
    public static final int CODE_LOCAL_CALL_EXCEEDED = 141;
    // IMS <- Telephony
    /**
     * The call is busy.
     */
    public static final int CODE_LOCAL_CALL_BUSY = 142;
    /**
     * The Call has been declined locally on this device.
     */
    public static final int CODE_LOCAL_CALL_DECLINE = 143;
    // IMS -> Telephony
    /**
     * Can not complete call; an SRVCC is in progress.
     */
    public static final int CODE_LOCAL_CALL_VCC_ON_PROGRESSING = 144;
    /**
     * Can not complete call; resource reservation is failed (QoS precondition)
     */
    public static final int CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 145;
    /**
     * VoLTE service can't be provided by the network or remote end, retry the call.
     * Resolve the extra code provided in (EXTRA_CODE_CALL_RETRY_*) if the below code is set
     */
    public static final int CODE_LOCAL_CALL_CS_RETRY_REQUIRED = 146;
    /**
     * VoLTE service can't be provided by the network temporarily, retry the call.
     */
    public static final int CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED = 147;
    /**
     * IMS call is already terminated (in TERMINATED state).
     */
    public static final int CODE_LOCAL_CALL_TERMINATED = 148;
    /**
     * Call was disconnected because a handover is not feasible due to network conditions.
     */
    public static final int CODE_LOCAL_HO_NOT_FEASIBLE = 149;
    /**
     * This device does not support IMS.
     * @hide
     */
    public static final int CODE_LOCAL_IMS_NOT_SUPPORTED_ON_DEVICE = 150;

    /*
     * TIMEOUT (IMS -> Telephony)
     */
    /**
     * 1xx waiting timer is expired after sending INVITE request (MO calls only)
     */
    public static final int CODE_TIMEOUT_1XX_WAITING = 201;
    /**
     * User didn't answer during call setup operation (MO/MT)
     * MO : 200 OK to INVITE request is not received,
     * MT : No action from user after alerting the call
     */
    public static final int CODE_TIMEOUT_NO_ANSWER = 202;
    /**
     * User no answer during call update operation (MO/MT)
     * MO : 200 OK to re-INVITE request is not received,
     * MT : No action from user after alerting the call
     */
    public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203;

    /**
     * The call was blocked by call barring configuration.
     */
    public static final int CODE_CALL_BARRED = 240;

    /**
     * The operation is restricted to fixed dialing numbers only.
     */
    public static final int CODE_FDN_BLOCKED = 241;

    /**
     * Network rejected the emergency call request because IMEI was used as identification
     * and this capability is not supported by the network.
     */
    public static final int CODE_IMEI_NOT_ACCEPTED = 243;

    //STK CC errors
    /**
     * Stk Call Control modified DIAL request to USSD request.
     */
    public static final int CODE_DIAL_MODIFIED_TO_USSD = 244;
    /**
     * Stk Call Control modified DIAL request to SS request.
     */
    public static final int CODE_DIAL_MODIFIED_TO_SS = 245;
    /**
     * Stk Call Control modified DIAL request to DIAL with modified data.
     */
    public static final int CODE_DIAL_MODIFIED_TO_DIAL = 246;
    /**
     * Stk Call Control modified DIAL request to Video DIAL request.
     */
    public static final int CODE_DIAL_MODIFIED_TO_DIAL_VIDEO = 247;
    /**
     * Stk Call Control modified Video DIAL request to DIAL request.
     */
    public static final int CODE_DIAL_VIDEO_MODIFIED_TO_DIAL = 248;
    /**
     * Stk Call Control modified Video DIAL request to Video DIAL request.
     */
    public static final int CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 249;
    /**
     * Stk Call Control modified Video DIAL request to SS request.
     */
    public static final int CODE_DIAL_VIDEO_MODIFIED_TO_SS = 250;
    /**
     * Stk Call Control modified Video DIAL request to USSD request.
     */
    public static final int CODE_DIAL_VIDEO_MODIFIED_TO_USSD = 251;

    /*
     * STATUSCODE (SIP response code) (IMS -> Telephony)
     */
    // 3xx responses
    /**
     * SIP 3xx response: SIP request is redirected
     */
    public static final int CODE_SIP_REDIRECTED = 321;
    // 4xx responses
    /**
     * Sip 400 response : Bad Request
     */
    public static final int CODE_SIP_BAD_REQUEST = 331;
    /**
     * Sip 403 response : Forbidden
     */
    public static final int CODE_SIP_FORBIDDEN = 332;
    /**
     * Sip 404 response : Not Found
     */
    public static final int CODE_SIP_NOT_FOUND = 333;
    /**
     * Not supported, because of one of the following:
     * SIP response 415 : Unsupported Media Type,
     * SIP response 416 : Unsupported URI Scheme,
     * SIP response 420 : Bad Extension
     */
    public static final int CODE_SIP_NOT_SUPPORTED = 334;
    /**
     * SIP response 408 : Request Timeout.
     */
    public static final int CODE_SIP_REQUEST_TIMEOUT = 335;
    /**
     * SIP response 480 : Temporarily Unavailable
     */
    public static final int CODE_SIP_TEMPRARILY_UNAVAILABLE = 336;
    /**
     * SIP response 484 : Address Incomplete
     */
    public static final int CODE_SIP_BAD_ADDRESS = 337;
    /**
     * Returned a busy response, may be one of the following:
     * SIP response 486 : Busy Here,
     * SIP response 600 : Busy Everywhere
     */
    public static final int CODE_SIP_BUSY = 338;
    /**
     * SIP response 487 : Request Terminated
     */
    public static final int CODE_SIP_REQUEST_CANCELLED = 339;
    /**
     * Received a not acceptable response, will be one of the following:
     * SIP response 406 : Not Acceptable
     * SIP response 488 : Not Acceptable Here
     * SIP response 606 : Not Acceptable
     */
    public static final int CODE_SIP_NOT_ACCEPTABLE = 340;
    /**
     * Received a not acceptable response, will be one of the following:
     * SIP response 410 : Gone
     * SIP response 604 : Does Not Exist Anywhere
     */
    public static final int CODE_SIP_NOT_REACHABLE = 341;
    /**
     * Received another unspecified error SIP response from the client.
     */
    public static final int CODE_SIP_CLIENT_ERROR = 342;
    /**
     * SIP response 481: Transaction Does Not Exist
     */
    public static final int CODE_SIP_TRANSACTION_DOES_NOT_EXIST = 343;
    // 5xx responses
    /**
     * SIP response 501 : Server Internal Error
     */
    public static final int CODE_SIP_SERVER_INTERNAL_ERROR = 351;
    /**
     * SIP response 503 : Service Unavailable
     */
    public static final int CODE_SIP_SERVICE_UNAVAILABLE = 352;
    /**
     * SIP response 504 : Server Time-out
     */
    public static final int CODE_SIP_SERVER_TIMEOUT = 353;
    /**
     * Received an unspecified SIP server error response.
     */
    public static final int CODE_SIP_SERVER_ERROR = 354;
    // 6xx responses
    /**
     * 603 : Decline
     */
    public static final int CODE_SIP_USER_REJECTED = 361;
    /**
     * Unspecified 6xx error.
     */
    public static final int CODE_SIP_GLOBAL_ERROR = 362;

    /**
     * Emergency call failed in the modem with a temporary fail cause and should be redialed on this
     * slot.
     */
    public static final int CODE_EMERGENCY_TEMP_FAILURE = 363;
    /**
     * Emergency call failed in the modem with a permanent fail cause and should not be redialed on
     * this slot. If there are any other slots available for emergency calling, try those.
     */
    public static final int CODE_EMERGENCY_PERM_FAILURE = 364;

    /**
     * Call failure code during hangup/reject if user marked the call as unwanted.
     *
     * Android Telephony will receive information whether ROBO call feature is supported by the
     * network from modem and propagate the same to AOSP as new ImsCallProfile members. OEMs can
     * check this information and provide an option to the user to mark the call as unwanted.
     */
    public static final int CODE_SIP_USER_MARKED_UNWANTED = 365;

    /**
     * SIP Response : 405
     * Method not allowed for the address in the Request URI
     */
    public static final int CODE_SIP_METHOD_NOT_ALLOWED = 366;

    /**
     * SIP Response : 407
     * The request requires user authentication
     */
    public static final int CODE_SIP_PROXY_AUTHENTICATION_REQUIRED = 367;

    /**
     * SIP Response : 413
     * Request body too large
     */
    public static final int CODE_SIP_REQUEST_ENTITY_TOO_LARGE = 368;

    /**
     * SIP Response : 414
     * Request-URI too large
     */
    public static final int CODE_SIP_REQUEST_URI_TOO_LARGE = 369;

    /**
     * SIP Response : 421
     * Specific extension is required, which is not present in the HEADER
     */
    public static final int CODE_SIP_EXTENSION_REQUIRED = 370;

    /**
     * SIP Response : 422
     * The session expiration field too small
     */
    public static final int CODE_SIP_INTERVAL_TOO_BRIEF = 371;

    /**
     * SIP Response : 481
     * Request received by the server does not match any dialog or transaction
     */
    public static final int CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST = 372;

    /**
     * SIP Response : 482
     * Server has detected a loop
     */
    public static final int CODE_SIP_LOOP_DETECTED = 373;

    /**
     * SIP Response : 483
     * Max-Forwards value reached
     */
    public static final int CODE_SIP_TOO_MANY_HOPS = 374;

    /**
     * SIP Response : 485
     * Request-URI is ambiguous
     *
     */
    public static final int CODE_SIP_AMBIGUOUS = 376;

    /**
     * SIP Response : 491
     * Server has pending request for same dialog
     */
    public static final int CODE_SIP_REQUEST_PENDING = 377;

    /**
     * SIP Response : 493
     * The request cannot be decrypted by recipient
     */
    public static final int CODE_SIP_UNDECIPHERABLE = 378;

    /**
     * MEDIA (IMS -> Telephony)
     */
    /**
     * Media resource initialization failed
     */
    public static final int CODE_MEDIA_INIT_FAILED = 401;
    /**
     * RTP timeout (no audio / video traffic in the session)
     */
    public static final int CODE_MEDIA_NO_DATA = 402;
    /**
     * Media is not supported; so dropped the call
     */
    public static final int CODE_MEDIA_NOT_ACCEPTABLE = 403;
    /**
     * Unspecified media related error.
     */
    public static final int CODE_MEDIA_UNSPECIFIED = 404;

    /*
     * USER
     */
    // Telephony -> IMS
    /**
     * User triggers the call to be terminated.
     */
    public static final int CODE_USER_TERMINATED = 501;
    /**
     * No action was taken while an incoming call was ringing.
     */
    public static final int CODE_USER_NOANSWER = 502;
    /**
     * User ignored an incoming call.
     */
    public static final int CODE_USER_IGNORE = 503;
    /**
     * User declined an incoming call.
     */
    public static final int CODE_USER_DECLINE = 504;
    /**
     * Device declined/ended a call due to a low battery condition.
     */
    public static final int CODE_LOW_BATTERY = 505;
    /**
     * Device declined a call due to a blacklisted caller ID.
     */
    public static final int CODE_BLACKLISTED_CALL_ID = 506;
    // IMS -> Telephony
    /**
     * The call has been terminated by the network or remote user.
     */
    public static final int CODE_USER_TERMINATED_BY_REMOTE = 510;
    /**
    * Upgrade Downgrade request rejected by
    * Remote user if the request is MO initiated
    * Local user if the request is MT initiated
    */
    public static final int CODE_USER_REJECTED_SESSION_MODIFICATION = 511;

    /**
    * Upgrade Downgrade request cancelled by the user who initiated it
    */
    public static final int CODE_USER_CANCELLED_SESSION_MODIFICATION = 512;

    /**
     * UPGRADE DOWNGRADE operation failed
     * This can happen due to failure from SIP/RTP/SDP generation or a Call end is
     * triggered/received while Reinvite is in progress.
     */
    public static final int CODE_SESSION_MODIFICATION_FAILED = 1517;

    /*
     * UT
     */
    /**
     * UT is currently not supported on this device.
     */
    public static final int CODE_UT_NOT_SUPPORTED = 801;
    /**
     * UT services are currently not available on this device.
     */
    public static final int CODE_UT_SERVICE_UNAVAILABLE = 802;
    /**
     * The requested UT operation is not allowed.
     */
    public static final int CODE_UT_OPERATION_NOT_ALLOWED = 803;
    /**
     * The UT request resulted in a network error.
     */
    public static final int CODE_UT_NETWORK_ERROR = 804;
    /**
     * The password entered for UT operations does not match the stored password.
     */
    public static final int CODE_UT_CB_PASSWORD_MISMATCH = 821;
    //STK CC errors
    /**
     * Sim Toolkit Call Control modified the UT operation to a dial command.
     */
    public static final int CODE_UT_SS_MODIFIED_TO_DIAL = 822;
    /**
     * Sim Toolkit Call Control modified the UT operation to a USSD command.
     */
    public static final int CODE_UT_SS_MODIFIED_TO_USSD = 823;
    /**
     * Sim Toolkit Call Control modified the UT operation to another supplementary service command.
     */
    public static final int CODE_UT_SS_MODIFIED_TO_SS = 824;
    /**
     * Sim Toolkit Call Control modified the UT operation to a video call dial command.
     */
    public static final int CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO = 825;

    /**@hide*/
    @IntDef(value = {
            CODE_UT_NOT_SUPPORTED,
            CODE_UT_SERVICE_UNAVAILABLE,
            CODE_UT_OPERATION_NOT_ALLOWED,
            CODE_UT_NETWORK_ERROR,
            CODE_UT_CB_PASSWORD_MISMATCH,
            CODE_UT_SS_MODIFIED_TO_DIAL,
            CODE_UT_SS_MODIFIED_TO_USSD,
            CODE_UT_SS_MODIFIED_TO_SS,
            CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO
    }, prefix = "CODE_UT_")
    @Retention(RetentionPolicy.SOURCE)
    public @interface UtReason {}

    /**
     * Emergency callback mode is not supported.
     */
    public static final int CODE_ECBM_NOT_SUPPORTED = 901;

    /**
     * Fail code used to indicate that Multi-endpoint is not supported by the IMS framework.
     */
    public static final int CODE_MULTIENDPOINT_NOT_SUPPORTED = 902;

    /**
     * IMS Registration error code
     */
    public static final int CODE_REGISTRATION_ERROR = 1000;

    /*
     * CALL DROP error codes (Call could drop because of many reasons like Network not available,
     *  handover, failed, etc)
     */
    /**
     * MT call has ended due to a release from the network because the call was answered elsewhere.
     */
    public static final int CODE_ANSWERED_ELSEWHERE = 1014;

    /**
     * For MultiEndpoint - Call Pull request has failed.
     */
    public static final int CODE_CALL_PULL_OUT_OF_SYNC = 1015;

    /**
     * For MultiEndpoint - Call has been pulled from primary to secondary.
     */
    public static final int CODE_CALL_END_CAUSE_CALL_PULL = 1016;

    /**
     * CALL DROP error code for the case when a device is ePDG capable and when the user is on an
     * active wifi call and at the edge of coverage and there is no qualified LTE network available
     * to handover the call to. We get a handover NOT_TRIGERRED message from the modem. This error
     * code is received as part of the handover message.
     */
    public static final int CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 1100;

    /**
     * For MultiEndPoint - Call was rejected elsewhere
     */
    public static final int CODE_REJECTED_ELSEWHERE = 1017;

    /**
     * Supplementary services (HOLD/RESUME) failure error codes.
     * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision.
     */

    /**
     * Supplementary Services (HOLD/RESUME) - the command failed.
     */
    public static final int CODE_SUPP_SVC_FAILED = 1201;
    /**
     * Supplementary Services (HOLD/RESUME) - the command was cancelled.
     */
    public static final int CODE_SUPP_SVC_CANCELLED = 1202;
    /**
     * Supplementary Services (HOLD/RESUME) - the command resulted in a re-invite collision.
     */
    public static final int CODE_SUPP_SVC_REINVITE_COLLISION = 1203;

    /**
     * DPD Procedure received no response or send failed.
     */
    public static final int CODE_IWLAN_DPD_FAILURE = 1300;

    /**
     * Establishment of the ePDG Tunnel Failed.
     */
    public static final int CODE_EPDG_TUNNEL_ESTABLISH_FAILURE = 1400;

    /**
     * Re-keying of the ePDG Tunnel Failed; may not always result in teardown.
     */
    public static final int CODE_EPDG_TUNNEL_REKEY_FAILURE = 1401;

    /**
     * Connection to the packet gateway is lost.
     */
    public static final int CODE_EPDG_TUNNEL_LOST_CONNECTION = 1402;

    /**
     * The maximum number of calls allowed has been reached.  Used in a multi-endpoint scenario
     * where the number of calls across all connected devices has reached the maximum.
     */
    public static final int CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED = 1403;

    /**
     * Similar to {@link #CODE_LOCAL_CALL_DECLINE}, except indicates that a remote device has
     * declined the call.  Used in a multi-endpoint scenario where a remote device declined an
     * incoming call.
     */
    public static final int CODE_REMOTE_CALL_DECLINE = 1404;

    /**
     * Indicates the call was disconnected due to the user reaching their data limit.
     */
    public static final int CODE_DATA_LIMIT_REACHED = 1405;

    /**
     * Indicates the call was disconnected due to the user disabling cellular data.
     */
    public static final int CODE_DATA_DISABLED = 1406;

    /**
     * Indicates a call was disconnected due to loss of wifi signal.
     */
    public static final int CODE_WIFI_LOST = 1407;

    /**
     * Indicates the registration attempt on IWLAN failed due to IKEv2 authetication failure
     * during tunnel establishment.
     */
    public static final int CODE_IKEV2_AUTH_FAILURE = 1408;

    /** The call cannot be established because RADIO is OFF */
    public static final int CODE_RADIO_OFF = 1500;

    /** The call cannot be established because of no valid SIM */
    public static final int CODE_NO_VALID_SIM = 1501;

    /** The failure is due internal error at modem */
    public static final int CODE_RADIO_INTERNAL_ERROR = 1502;

    /** The failure is due to UE timer expired while waiting for a response from network */
    public static final int CODE_NETWORK_RESP_TIMEOUT = 1503;

    /** The failure is due to explicit reject from network */
    public static final int CODE_NETWORK_REJECT = 1504;

    /** The failure is due to radio access failure. ex. RACH failure */
    public static final int CODE_RADIO_ACCESS_FAILURE = 1505;

    /** Call/IMS registration failed/dropped because of a RLF */
    public static final int CODE_RADIO_LINK_FAILURE = 1506;

    /** Call/IMS registration failed/dropped because of radio link lost */
    public static final int CODE_RADIO_LINK_LOST = 1507;

    /** The call Call/IMS registration failed because of a radio uplink issue */
    public static final int CODE_RADIO_UPLINK_FAILURE = 1508;

    /** Call failed because of a RRC connection setup failure */
    public static final int CODE_RADIO_SETUP_FAILURE = 1509;

    /** Call failed/dropped because of RRC connection release from NW */
    public static final int CODE_RADIO_RELEASE_NORMAL = 1510;

    /** Call failed/dropped because of RRC abnormally released by modem/network */
    public static final int CODE_RADIO_RELEASE_ABNORMAL = 1511;

    /** Call failed because of access class barring */
    public static final int CODE_ACCESS_CLASS_BLOCKED = 1512;

    /** Call/IMS registration is failed/dropped because of a network detach */
    public static final int CODE_NETWORK_DETACH = 1513;

    /**
     * Call failed due to SIP code 380 (Alternative Service response) while dialing an "undetected
     * emergency number".  This scenario is important in some regions where the carrier network will
     * identify other non-emergency help numbers (e.g. mountain rescue) when attempting to dial.
     */
    public static final int CODE_SIP_ALTERNATE_EMERGENCY_CALL = 1514;

    /**
     * Call failed because of unobtainable number
     * @hide
     */
    public static final int CODE_UNOBTAINABLE_NUMBER = 1515;

    /**
     * Call failed because WiFi call could not complete and circuit switch silent redial
     * is not allowed while roaming on another network.
     */
    public static final int CODE_NO_CSFB_IN_CS_ROAM = 1516;

    /**
     * The rejection cause is not known.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_UNKNOWN = 1600;

    /**
     * Ongoing call, and call waiting is disabled.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_CALL_WAITING_DISABLED = 1601;

    /**
     * A call is ongoing on another sub.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_CALL_ON_OTHER_SUB = 1602;

    /**
     * CDMA call collision.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_1X_COLLISION = 1603;

    /**
     * IMS is not registered for service yet.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_SERVICE_NOT_REGISTERED = 1604;

    /**
     * The call type is not allowed on the current RAT.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_CALL_TYPE_NOT_ALLOWED = 1605;

    /**
     * And emergency call is ongoing.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_E911_CALL = 1606;

    /**
     * Another call is in the process of being establilshed.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_CALL_SETUP = 1607;

    /**
     * Maximum number of allowed calls are already in progress.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_MAX_CALL_LIMIT_REACHED = 1608;

    /**
     * Invalid/unsupported SIP headers received.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_UNSUPPORTED_SIP_HEADERS = 1609;

    /**
     * Invalid/unsupported SDP headers received.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_UNSUPPORTED_SDP_HEADERS = 1610;

    /**
     * A call transfer is in progress.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_CALL_TRANSFER = 1611;

    /**
     * An internal error occured while processing the call.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_INTERNAL_ERROR = 1612;

    /**
     * Call failure due to lack of dedicated bearer.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_QOS_FAILURE = 1613;

    /**
     * A call handover is in progress.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_HANDOVER = 1614;

    /**
     * Video calling not supported with TTY.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_VT_TTY_NOT_ALLOWED = 1615;

    /**
     * A call upgrade is in progress.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_CALL_UPGRADE = 1616;

    /**
     * Call from conference server, when TTY mode is ON.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED = 1617;

    /**
     * A conference call is ongoing.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_CONFERENCE_CALL = 1618;

    /**
     * A video call with AVPF is not supported.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_VT_AVPF_NOT_ALLOWED = 1619;

    /**
     * And encrypted call is ongoing; other calls not supported.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_ENCRYPTED_CALL = 1620;

    /**
     * A CS call is ongoing.
     * <p>
     * Used with implicit call rejection.
     */
    public static final int CODE_REJECT_ONGOING_CS_CALL = 1621;

    /**
     * An attempt was made to place an emergency call over WFC when emergency services is not
     * currently available in the current location.
     * @hide
     */
    public static final int CODE_EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE = 1622;

    /**
     * Indicates that WiFi calling service is not available in the current location.
     * @hide
     */
    public static final int CODE_WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION = 1623;

    /**
     * Call failed because of network congestion, resource is not available,
     * or no circuit or channel available, etc.
     */
    public static final int CODE_NETWORK_CONGESTION = 1624;

    /**
     * The dialed RTT call should be retried without RTT
     * @hide
     */
    public static final int CODE_RETRY_ON_IMS_WITHOUT_RTT = 3001;

    /*
     * OEM specific error codes. To be used by OEMs when they don't want to reveal error code which
     * would be replaced by ERROR_UNSPECIFIED.
     */
    public static final int CODE_OEM_CAUSE_1 = 0xf001;
    public static final int CODE_OEM_CAUSE_2 = 0xf002;
    public static final int CODE_OEM_CAUSE_3 = 0xf003;
    public static final int CODE_OEM_CAUSE_4 = 0xf004;
    public static final int CODE_OEM_CAUSE_5 = 0xf005;
    public static final int CODE_OEM_CAUSE_6 = 0xf006;
    public static final int CODE_OEM_CAUSE_7 = 0xf007;
    public static final int CODE_OEM_CAUSE_8 = 0xf008;
    public static final int CODE_OEM_CAUSE_9 = 0xf009;
    public static final int CODE_OEM_CAUSE_10 = 0xf00a;
    public static final int CODE_OEM_CAUSE_11 = 0xf00b;
    public static final int CODE_OEM_CAUSE_12 = 0xf00c;
    public static final int CODE_OEM_CAUSE_13 = 0xf00d;
    public static final int CODE_OEM_CAUSE_14 = 0xf00e;
    public static final int CODE_OEM_CAUSE_15 = 0xf00f;

    /**
     * @hide
     */
    @IntDef(value = {
            CODE_UNSPECIFIED,
            CODE_LOCAL_ILLEGAL_ARGUMENT,
            CODE_LOCAL_ILLEGAL_STATE,
            CODE_LOCAL_INTERNAL_ERROR,
            CODE_LOCAL_IMS_SERVICE_DOWN,
            CODE_LOCAL_NO_PENDING_CALL,
            CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE,
            CODE_LOCAL_POWER_OFF,
            CODE_LOCAL_LOW_BATTERY,
            CODE_LOCAL_NETWORK_NO_SERVICE,
            CODE_LOCAL_NETWORK_NO_LTE_COVERAGE,
            CODE_LOCAL_NETWORK_ROAMING,
            CODE_LOCAL_NETWORK_IP_CHANGED,
            CODE_LOCAL_SERVICE_UNAVAILABLE,
            CODE_LOCAL_NOT_REGISTERED,
            CODE_LOCAL_CALL_EXCEEDED,
            CODE_LOCAL_CALL_BUSY,
            CODE_LOCAL_CALL_DECLINE,
            CODE_LOCAL_CALL_VCC_ON_PROGRESSING,
            CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED,
            CODE_LOCAL_CALL_CS_RETRY_REQUIRED,
            CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED,
            CODE_LOCAL_CALL_TERMINATED,
            CODE_LOCAL_HO_NOT_FEASIBLE,
            CODE_TIMEOUT_1XX_WAITING,
            CODE_TIMEOUT_NO_ANSWER,
            CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE,
            CODE_CALL_BARRED,
            CODE_FDN_BLOCKED,
            CODE_IMEI_NOT_ACCEPTED,
            CODE_DIAL_MODIFIED_TO_USSD,
            CODE_DIAL_MODIFIED_TO_SS,
            CODE_DIAL_MODIFIED_TO_DIAL,
            CODE_DIAL_MODIFIED_TO_DIAL_VIDEO,
            CODE_DIAL_VIDEO_MODIFIED_TO_DIAL,
            CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO,
            CODE_DIAL_VIDEO_MODIFIED_TO_SS,
            CODE_DIAL_VIDEO_MODIFIED_TO_USSD,
            CODE_SIP_REDIRECTED,
            CODE_SIP_BAD_REQUEST,
            CODE_SIP_FORBIDDEN,
            CODE_SIP_NOT_FOUND,
            CODE_SIP_NOT_SUPPORTED,
            CODE_SIP_REQUEST_TIMEOUT,
            CODE_SIP_TEMPRARILY_UNAVAILABLE,
            CODE_SIP_BAD_ADDRESS,
            CODE_SIP_BUSY,
            CODE_SIP_REQUEST_CANCELLED,
            CODE_SIP_NOT_ACCEPTABLE,
            CODE_SIP_NOT_REACHABLE,
            CODE_SIP_CLIENT_ERROR,
            CODE_SIP_TRANSACTION_DOES_NOT_EXIST,
            CODE_SIP_SERVER_INTERNAL_ERROR,
            CODE_SIP_SERVICE_UNAVAILABLE,
            CODE_SIP_SERVER_TIMEOUT,
            CODE_SIP_SERVER_ERROR,
            CODE_SIP_USER_REJECTED,
            CODE_SIP_GLOBAL_ERROR,
            CODE_EMERGENCY_TEMP_FAILURE,
            CODE_EMERGENCY_PERM_FAILURE,
            CODE_SIP_USER_MARKED_UNWANTED,
            CODE_SIP_METHOD_NOT_ALLOWED,
            CODE_SIP_PROXY_AUTHENTICATION_REQUIRED,
            CODE_SIP_REQUEST_ENTITY_TOO_LARGE,
            CODE_SIP_REQUEST_URI_TOO_LARGE,
            CODE_SIP_EXTENSION_REQUIRED,
            CODE_SIP_INTERVAL_TOO_BRIEF,
            CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST,
            CODE_SIP_LOOP_DETECTED,
            CODE_SIP_TOO_MANY_HOPS,
            CODE_SIP_AMBIGUOUS,
            CODE_SIP_REQUEST_PENDING,
            CODE_SIP_UNDECIPHERABLE,
            CODE_MEDIA_INIT_FAILED,
            CODE_MEDIA_NO_DATA,
            CODE_MEDIA_NOT_ACCEPTABLE,
            CODE_MEDIA_UNSPECIFIED,
            CODE_USER_TERMINATED,
            CODE_USER_NOANSWER,
            CODE_USER_IGNORE,
            CODE_USER_DECLINE,
            CODE_LOW_BATTERY,
            CODE_BLACKLISTED_CALL_ID,
            CODE_USER_TERMINATED_BY_REMOTE,
            CODE_USER_REJECTED_SESSION_MODIFICATION,
            CODE_USER_CANCELLED_SESSION_MODIFICATION,
            CODE_SESSION_MODIFICATION_FAILED,
            CODE_UT_NOT_SUPPORTED,
            CODE_UT_SERVICE_UNAVAILABLE,
            CODE_UT_OPERATION_NOT_ALLOWED,
            CODE_UT_NETWORK_ERROR,
            CODE_UT_CB_PASSWORD_MISMATCH,
            CODE_UT_SS_MODIFIED_TO_DIAL,
            CODE_UT_SS_MODIFIED_TO_USSD,
            CODE_UT_SS_MODIFIED_TO_SS,
            CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO,
            CODE_ECBM_NOT_SUPPORTED,
            CODE_MULTIENDPOINT_NOT_SUPPORTED,
            CODE_REGISTRATION_ERROR,
            CODE_ANSWERED_ELSEWHERE,
            CODE_CALL_PULL_OUT_OF_SYNC,
            CODE_CALL_END_CAUSE_CALL_PULL,
            CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE,
            CODE_REJECTED_ELSEWHERE,
            CODE_SUPP_SVC_FAILED,
            CODE_SUPP_SVC_CANCELLED,
            CODE_SUPP_SVC_REINVITE_COLLISION,
            CODE_IWLAN_DPD_FAILURE,
            CODE_EPDG_TUNNEL_ESTABLISH_FAILURE,
            CODE_EPDG_TUNNEL_REKEY_FAILURE,
            CODE_EPDG_TUNNEL_LOST_CONNECTION,
            CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED,
            CODE_REMOTE_CALL_DECLINE,
            CODE_DATA_LIMIT_REACHED,
            CODE_DATA_DISABLED,
            CODE_WIFI_LOST,
            CODE_IKEV2_AUTH_FAILURE,
            CODE_RADIO_OFF,
            CODE_NO_VALID_SIM,
            CODE_RADIO_INTERNAL_ERROR,
            CODE_NETWORK_RESP_TIMEOUT,
            CODE_NETWORK_REJECT,
            CODE_RADIO_ACCESS_FAILURE,
            CODE_RADIO_LINK_FAILURE,
            CODE_RADIO_LINK_LOST,
            CODE_RADIO_UPLINK_FAILURE,
            CODE_RADIO_SETUP_FAILURE,
            CODE_RADIO_RELEASE_NORMAL,
            CODE_RADIO_RELEASE_ABNORMAL,
            CODE_ACCESS_CLASS_BLOCKED,
            CODE_NETWORK_DETACH,
            CODE_SIP_ALTERNATE_EMERGENCY_CALL,
            CODE_UNOBTAINABLE_NUMBER,
            CODE_NO_CSFB_IN_CS_ROAM,
            CODE_REJECT_UNKNOWN,
            CODE_REJECT_ONGOING_CALL_WAITING_DISABLED,
            CODE_REJECT_CALL_ON_OTHER_SUB,
            CODE_REJECT_1X_COLLISION,
            CODE_REJECT_SERVICE_NOT_REGISTERED,
            CODE_REJECT_CALL_TYPE_NOT_ALLOWED,
            CODE_REJECT_ONGOING_E911_CALL,
            CODE_REJECT_ONGOING_CALL_SETUP,
            CODE_REJECT_MAX_CALL_LIMIT_REACHED,
            CODE_REJECT_UNSUPPORTED_SIP_HEADERS,
            CODE_REJECT_UNSUPPORTED_SDP_HEADERS,
            CODE_REJECT_ONGOING_CALL_TRANSFER,
            CODE_REJECT_INTERNAL_ERROR,
            CODE_REJECT_QOS_FAILURE,
            CODE_REJECT_ONGOING_HANDOVER,
            CODE_REJECT_VT_TTY_NOT_ALLOWED,
            CODE_REJECT_ONGOING_CALL_UPGRADE,
            CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED,
            CODE_REJECT_ONGOING_CONFERENCE_CALL,
            CODE_REJECT_VT_AVPF_NOT_ALLOWED,
            CODE_REJECT_ONGOING_ENCRYPTED_CALL,
            CODE_REJECT_ONGOING_CS_CALL,
            CODE_NETWORK_CONGESTION,
            CODE_RETRY_ON_IMS_WITHOUT_RTT,
            CODE_OEM_CAUSE_1,
            CODE_OEM_CAUSE_2,
            CODE_OEM_CAUSE_3,
            CODE_OEM_CAUSE_4,
            CODE_OEM_CAUSE_5,
            CODE_OEM_CAUSE_6,
            CODE_OEM_CAUSE_7,
            CODE_OEM_CAUSE_8,
            CODE_OEM_CAUSE_9,
            CODE_OEM_CAUSE_10,
            CODE_OEM_CAUSE_11,
            CODE_OEM_CAUSE_12,
            CODE_OEM_CAUSE_13,
            CODE_OEM_CAUSE_14,
            CODE_OEM_CAUSE_15
    }, prefix = "CODE_")
    @Retention(RetentionPolicy.SOURCE)
    public @interface ImsCode {}


    private static final Map<Integer, String>   sImsCodeMap;
    static {
        sImsCodeMap = new HashMap<>();
        sImsCodeMap.put(CODE_UNSPECIFIED, "CODE_UNSPECIFIED");
        sImsCodeMap.put(CODE_LOCAL_ILLEGAL_ARGUMENT, "CODE_LOCAL_ILLEGAL_ARGUMENT");
        sImsCodeMap.put(CODE_LOCAL_ILLEGAL_STATE, "CODE_LOCAL_ILLEGAL_STATE");
        sImsCodeMap.put(CODE_LOCAL_INTERNAL_ERROR, "CODE_LOCAL_INTERNAL_ERROR");
        sImsCodeMap.put(CODE_LOCAL_IMS_SERVICE_DOWN, "CODE_LOCAL_IMS_SERVICE_DOWN");
        sImsCodeMap.put(CODE_LOCAL_NO_PENDING_CALL, "CODE_LOCAL_NO_PENDING_CALL");
        sImsCodeMap.put(CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE,
                "CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE");
        sImsCodeMap.put(CODE_LOCAL_POWER_OFF, "CODE_LOCAL_POWER_OFF");
        sImsCodeMap.put(CODE_LOCAL_LOW_BATTERY, "CODE_LOCAL_LOW_BATTERY");
        sImsCodeMap.put(CODE_LOCAL_NETWORK_NO_SERVICE, "CODE_LOCAL_NETWORK_NO_SERVICE");
        sImsCodeMap.put(CODE_LOCAL_NETWORK_NO_LTE_COVERAGE, "CODE_LOCAL_NETWORK_NO_LTE_COVERAGE");
        sImsCodeMap.put(CODE_LOCAL_NETWORK_ROAMING, "CODE_LOCAL_NETWORK_ROAMING");
        sImsCodeMap.put(CODE_LOCAL_NETWORK_IP_CHANGED, "CODE_LOCAL_NETWORK_IP_CHANGED");
        sImsCodeMap.put(CODE_LOCAL_SERVICE_UNAVAILABLE, "CODE_LOCAL_SERVICE_UNAVAILABLE");
        sImsCodeMap.put(CODE_LOCAL_NOT_REGISTERED, "CODE_LOCAL_NOT_REGISTERED");
        sImsCodeMap.put(CODE_LOCAL_CALL_EXCEEDED, "CODE_LOCAL_CALL_EXCEEDED");
        sImsCodeMap.put(CODE_LOCAL_CALL_BUSY, "CODE_LOCAL_CALL_BUSY");
        sImsCodeMap.put(CODE_LOCAL_CALL_DECLINE, "CODE_LOCAL_CALL_DECLINE");
        sImsCodeMap.put(CODE_LOCAL_CALL_VCC_ON_PROGRESSING, "CODE_LOCAL_CALL_VCC_ON_PROGRESSING");
        sImsCodeMap.put(CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED,
                "CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED");
        sImsCodeMap.put(CODE_LOCAL_CALL_CS_RETRY_REQUIRED, "CODE_LOCAL_CALL_CS_RETRY_REQUIRED");
        sImsCodeMap.put(CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED,
                "CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED");
        sImsCodeMap.put(CODE_LOCAL_CALL_TERMINATED, "CODE_LOCAL_CALL_TERMINATED");
        sImsCodeMap.put(CODE_LOCAL_HO_NOT_FEASIBLE, "CODE_LOCAL_HO_NOT_FEASIBLE");
        sImsCodeMap.put(CODE_TIMEOUT_1XX_WAITING, "CODE_TIMEOUT_1XX_WAITING");
        sImsCodeMap.put(CODE_TIMEOUT_NO_ANSWER, "CODE_TIMEOUT_NO_ANSWER");
        sImsCodeMap.put(CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE, "CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE");
        sImsCodeMap.put(CODE_CALL_BARRED, "CODE_CALL_BARRED");
        sImsCodeMap.put(CODE_FDN_BLOCKED, "CODE_FDN_BLOCKED");
        sImsCodeMap.put(CODE_IMEI_NOT_ACCEPTED, "CODE_IMEI_NOT_ACCEPTED");
        sImsCodeMap.put(CODE_DIAL_MODIFIED_TO_USSD, "CODE_DIAL_MODIFIED_TO_USSD");
        sImsCodeMap.put(CODE_DIAL_MODIFIED_TO_SS, "CODE_DIAL_MODIFIED_TO_SS");
        sImsCodeMap.put(CODE_DIAL_MODIFIED_TO_DIAL, "CODE_DIAL_MODIFIED_TO_DIAL");
        sImsCodeMap.put(CODE_DIAL_MODIFIED_TO_DIAL_VIDEO, "CODE_DIAL_MODIFIED_TO_DIAL_VIDEO");
        sImsCodeMap.put(CODE_DIAL_VIDEO_MODIFIED_TO_DIAL, "CODE_DIAL_VIDEO_MODIFIED_TO_DIAL");
        sImsCodeMap.put(CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO,
                "CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO");
        sImsCodeMap.put(CODE_DIAL_VIDEO_MODIFIED_TO_SS, "CODE_DIAL_VIDEO_MODIFIED_TO_SS");
        sImsCodeMap.put(CODE_DIAL_VIDEO_MODIFIED_TO_USSD, "CODE_DIAL_VIDEO_MODIFIED_TO_USSD");
        sImsCodeMap.put(CODE_SIP_REDIRECTED, "CODE_SIP_REDIRECTED");
        sImsCodeMap.put(CODE_SIP_BAD_REQUEST, "CODE_SIP_BAD_REQUEST");
        sImsCodeMap.put(CODE_SIP_FORBIDDEN, "CODE_SIP_FORBIDDEN");
        sImsCodeMap.put(CODE_SIP_NOT_FOUND, "CODE_SIP_NOT_FOUND");
        sImsCodeMap.put(CODE_SIP_NOT_SUPPORTED, "CODE_SIP_NOT_SUPPORTED");
        sImsCodeMap.put(CODE_SIP_REQUEST_TIMEOUT, "CODE_SIP_REQUEST_TIMEOUT");
        sImsCodeMap.put(CODE_SIP_TEMPRARILY_UNAVAILABLE, "CODE_SIP_TEMPRARILY_UNAVAILABLE");
        sImsCodeMap.put(CODE_SIP_BAD_ADDRESS, "CODE_SIP_BAD_ADDRESS");
        sImsCodeMap.put(CODE_SIP_BUSY, "CODE_SIP_BUSY");
        sImsCodeMap.put(CODE_SIP_REQUEST_CANCELLED, "CODE_SIP_REQUEST_CANCELLED");
        sImsCodeMap.put(CODE_SIP_NOT_ACCEPTABLE, "CODE_SIP_NOT_ACCEPTABLE");
        sImsCodeMap.put(CODE_SIP_NOT_REACHABLE, "CODE_SIP_NOT_REACHABLE");
        sImsCodeMap.put(CODE_SIP_CLIENT_ERROR, "CODE_SIP_CLIENT_ERROR");
        sImsCodeMap.put(CODE_SIP_TRANSACTION_DOES_NOT_EXIST, "CODE_SIP_TRANSACTION_DOES_NOT_EXIST");
        sImsCodeMap.put(CODE_SIP_SERVER_INTERNAL_ERROR, "CODE_SIP_SERVER_INTERNAL_ERROR");
        sImsCodeMap.put(CODE_SIP_SERVICE_UNAVAILABLE, "CODE_SIP_SERVICE_UNAVAILABLE");
        sImsCodeMap.put(CODE_SIP_SERVER_TIMEOUT, "CODE_SIP_SERVER_TIMEOUT");
        sImsCodeMap.put(CODE_SIP_SERVER_ERROR, "CODE_SIP_SERVER_ERROR");
        sImsCodeMap.put(CODE_SIP_USER_REJECTED, "CODE_SIP_USER_REJECTED");
        sImsCodeMap.put(CODE_SIP_GLOBAL_ERROR, "CODE_SIP_GLOBAL_ERROR");
        sImsCodeMap.put(CODE_EMERGENCY_TEMP_FAILURE, "CODE_EMERGENCY_TEMP_FAILURE");
        sImsCodeMap.put(CODE_EMERGENCY_PERM_FAILURE, "CODE_EMERGENCY_PERM_FAILURE");
        sImsCodeMap.put(CODE_SIP_USER_MARKED_UNWANTED, "CODE_SIP_USER_MARKED_UNWANTED");
        sImsCodeMap.put(CODE_SIP_METHOD_NOT_ALLOWED, "CODE_SIP_METHOD_NOT_ALLOWED");
        sImsCodeMap.put(CODE_SIP_PROXY_AUTHENTICATION_REQUIRED,
                "CODE_SIP_PROXY_AUTHENTICATION_REQUIRED");
        sImsCodeMap.put(CODE_SIP_REQUEST_ENTITY_TOO_LARGE, "CODE_SIP_REQUEST_ENTITY_TOO_LARGE");
        sImsCodeMap.put(CODE_SIP_REQUEST_URI_TOO_LARGE, "CODE_SIP_REQUEST_URI_TOO_LARGE");
        sImsCodeMap.put(CODE_SIP_EXTENSION_REQUIRED, "CODE_SIP_EXTENSION_REQUIRED");
        sImsCodeMap.put(CODE_SIP_INTERVAL_TOO_BRIEF, "CODE_SIP_INTERVAL_TOO_BRIEF");
        sImsCodeMap.put(CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST,
                "CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST");
        sImsCodeMap.put(CODE_SIP_LOOP_DETECTED, "CODE_SIP_LOOP_DETECTED");
        sImsCodeMap.put(CODE_SIP_TOO_MANY_HOPS, "CODE_SIP_TOO_MANY_HOPS");
        sImsCodeMap.put(CODE_SIP_AMBIGUOUS, "CODE_SIP_AMBIGUOUS");
        sImsCodeMap.put(CODE_SIP_REQUEST_PENDING, "CODE_SIP_REQUEST_PENDING");
        sImsCodeMap.put(CODE_SIP_UNDECIPHERABLE, "CODE_SIP_UNDECIPHERABLE");
        sImsCodeMap.put(CODE_MEDIA_INIT_FAILED, "CODE_MEDIA_INIT_FAILED");
        sImsCodeMap.put(CODE_MEDIA_NO_DATA, "CODE_MEDIA_NO_DATA");
        sImsCodeMap.put(CODE_MEDIA_NOT_ACCEPTABLE, "CODE_MEDIA_NOT_ACCEPTABLE");
        sImsCodeMap.put(CODE_MEDIA_UNSPECIFIED, "CODE_MEDIA_UNSPECIFIED");
        sImsCodeMap.put(CODE_USER_TERMINATED, "CODE_USER_TERMINATED");
        sImsCodeMap.put(CODE_USER_NOANSWER, "CODE_USER_NOANSWER");
        sImsCodeMap.put(CODE_USER_IGNORE, "CODE_USER_IGNORE");
        sImsCodeMap.put(CODE_USER_DECLINE, "CODE_USER_DECLINE");
        sImsCodeMap.put(CODE_LOW_BATTERY, "CODE_LOW_BATTERY");
        sImsCodeMap.put(CODE_BLACKLISTED_CALL_ID, "CODE_BLACKLISTED_CALL_ID");
        sImsCodeMap.put(CODE_USER_TERMINATED_BY_REMOTE, "CODE_USER_TERMINATED_BY_REMOTE");
        sImsCodeMap.put(CODE_USER_REJECTED_SESSION_MODIFICATION,
                "CODE_USER_REJECTED_SESSION_MODIFICATION");
        sImsCodeMap.put(CODE_USER_CANCELLED_SESSION_MODIFICATION,
                "CODE_USER_CANCELLED_SESSION_MODIFICATION");
        sImsCodeMap.put(CODE_SESSION_MODIFICATION_FAILED, "CODE_SESSION_MODIFICATION_FAILED");
        sImsCodeMap.put(CODE_UT_NOT_SUPPORTED, "CODE_UT_NOT_SUPPORTED");
        sImsCodeMap.put(CODE_UT_SERVICE_UNAVAILABLE, "CODE_UT_SERVICE_UNAVAILABLE");
        sImsCodeMap.put(CODE_UT_OPERATION_NOT_ALLOWED, "CODE_UT_OPERATION_NOT_ALLOWED");
        sImsCodeMap.put(CODE_UT_NETWORK_ERROR, "CODE_UT_NETWORK_ERROR");
        sImsCodeMap.put(CODE_UT_CB_PASSWORD_MISMATCH, "CODE_UT_CB_PASSWORD_MISMATCH");
        sImsCodeMap.put(CODE_UT_SS_MODIFIED_TO_DIAL, "CODE_UT_SS_MODIFIED_TO_DIAL");
        sImsCodeMap.put(CODE_UT_SS_MODIFIED_TO_USSD, "CODE_UT_SS_MODIFIED_TO_USSD");
        sImsCodeMap.put(CODE_UT_SS_MODIFIED_TO_SS, "CODE_UT_SS_MODIFIED_TO_SS");
        sImsCodeMap.put(CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO, "CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO");
        sImsCodeMap.put(CODE_ECBM_NOT_SUPPORTED, "CODE_ECBM_NOT_SUPPORTED");
        sImsCodeMap.put(CODE_MULTIENDPOINT_NOT_SUPPORTED, "CODE_MULTIENDPOINT_NOT_SUPPORTED");
        sImsCodeMap.put(CODE_REGISTRATION_ERROR, "CODE_REGISTRATION_ERROR");
        sImsCodeMap.put(CODE_ANSWERED_ELSEWHERE, "CODE_ANSWERED_ELSEWHERE");
        sImsCodeMap.put(CODE_CALL_PULL_OUT_OF_SYNC, "CODE_CALL_PULL_OUT_OF_SYNC");
        sImsCodeMap.put(CODE_CALL_END_CAUSE_CALL_PULL, "CODE_CALL_END_CAUSE_CALL_PULL");
        sImsCodeMap.put(CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE,
                "CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE");
        sImsCodeMap.put(CODE_REJECTED_ELSEWHERE, "CODE_REJECTED_ELSEWHERE");
        sImsCodeMap.put(CODE_SUPP_SVC_FAILED, "CODE_SUPP_SVC_FAILED");
        sImsCodeMap.put(CODE_SUPP_SVC_CANCELLED, "CODE_SUPP_SVC_CANCELLED");
        sImsCodeMap.put(CODE_SUPP_SVC_REINVITE_COLLISION, "CODE_SUPP_SVC_REINVITE_COLLISION");
        sImsCodeMap.put(CODE_IWLAN_DPD_FAILURE, "CODE_IWLAN_DPD_FAILURE");
        sImsCodeMap.put(CODE_EPDG_TUNNEL_ESTABLISH_FAILURE, "CODE_EPDG_TUNNEL_ESTABLISH_FAILURE");
        sImsCodeMap.put(CODE_EPDG_TUNNEL_REKEY_FAILURE, "CODE_EPDG_TUNNEL_REKEY_FAILURE");
        sImsCodeMap.put(CODE_EPDG_TUNNEL_LOST_CONNECTION, "CODE_EPDG_TUNNEL_LOST_CONNECTION");
        sImsCodeMap.put(CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED,
                "CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED");
        sImsCodeMap.put(CODE_REMOTE_CALL_DECLINE, "CODE_REMOTE_CALL_DECLINE");
        sImsCodeMap.put(CODE_DATA_LIMIT_REACHED, "CODE_DATA_LIMIT_REACHED");
        sImsCodeMap.put(CODE_DATA_DISABLED, "CODE_DATA_DISABLED");
        sImsCodeMap.put(CODE_WIFI_LOST, "CODE_WIFI_LOST");
        sImsCodeMap.put(CODE_IKEV2_AUTH_FAILURE, "CODE_IKEV2_AUTH_FAILURE");
        sImsCodeMap.put(CODE_RADIO_OFF, "CODE_RADIO_OFF");
        sImsCodeMap.put(CODE_NO_VALID_SIM, "CODE_NO_VALID_SIM");
        sImsCodeMap.put(CODE_RADIO_INTERNAL_ERROR, "CODE_RADIO_INTERNAL_ERROR");
        sImsCodeMap.put(CODE_NETWORK_RESP_TIMEOUT, "CODE_NETWORK_RESP_TIMEOUT");
        sImsCodeMap.put(CODE_NETWORK_REJECT, "CODE_NETWORK_REJECT");
        sImsCodeMap.put(CODE_RADIO_ACCESS_FAILURE, "CODE_RADIO_ACCESS_FAILURE");
        sImsCodeMap.put(CODE_RADIO_LINK_FAILURE, "CODE_RADIO_LINK_FAILURE");
        sImsCodeMap.put(CODE_RADIO_LINK_LOST, "CODE_RADIO_LINK_LOST");
        sImsCodeMap.put(CODE_RADIO_UPLINK_FAILURE, "CODE_RADIO_UPLINK_FAILURE");
        sImsCodeMap.put(CODE_RADIO_SETUP_FAILURE, "CODE_RADIO_SETUP_FAILURE");
        sImsCodeMap.put(CODE_RADIO_RELEASE_NORMAL, "CODE_RADIO_RELEASE_NORMAL");
        sImsCodeMap.put(CODE_RADIO_RELEASE_ABNORMAL, "CODE_RADIO_RELEASE_ABNORMAL");
        sImsCodeMap.put(CODE_ACCESS_CLASS_BLOCKED, "CODE_ACCESS_CLASS_BLOCKED");
        sImsCodeMap.put(CODE_NETWORK_DETACH, "CODE_NETWORK_DETACH");
        sImsCodeMap.put(CODE_SIP_ALTERNATE_EMERGENCY_CALL, "CODE_SIP_ALTERNATE_EMERGENCY_CALL");
        sImsCodeMap.put(CODE_UNOBTAINABLE_NUMBER, "CODE_UNOBTAINABLE_NUMBER");
        sImsCodeMap.put(CODE_NO_CSFB_IN_CS_ROAM, "CODE_NO_CSFB_IN_CS_ROAM");
        sImsCodeMap.put(CODE_REJECT_UNKNOWN, "CODE_REJECT_UNKNOWN");
        sImsCodeMap.put(CODE_REJECT_ONGOING_CALL_WAITING_DISABLED,
                "CODE_REJECT_ONGOING_CALL_WAITING_DISABLED");
        sImsCodeMap.put(CODE_REJECT_CALL_ON_OTHER_SUB, "CODE_REJECT_CALL_ON_OTHER_SUB");
        sImsCodeMap.put(CODE_REJECT_1X_COLLISION, "CODE_REJECT_1X_COLLISION");
        sImsCodeMap.put(CODE_REJECT_SERVICE_NOT_REGISTERED, "CODE_REJECT_SERVICE_NOT_REGISTERED");
        sImsCodeMap.put(CODE_REJECT_CALL_TYPE_NOT_ALLOWED, "CODE_REJECT_CALL_TYPE_NOT_ALLOWED");
        sImsCodeMap.put(CODE_REJECT_ONGOING_E911_CALL, "CODE_REJECT_ONGOING_E911_CALL");
        sImsCodeMap.put(CODE_REJECT_ONGOING_CALL_SETUP, "CODE_REJECT_ONGOING_CALL_SETUP");
        sImsCodeMap.put(CODE_REJECT_MAX_CALL_LIMIT_REACHED, "CODE_REJECT_MAX_CALL_LIMIT_REACHED");
        sImsCodeMap.put(CODE_REJECT_UNSUPPORTED_SIP_HEADERS, "CODE_REJECT_UNSUPPORTED_SIP_HEADERS");
        sImsCodeMap.put(CODE_REJECT_UNSUPPORTED_SDP_HEADERS, "CODE_REJECT_UNSUPPORTED_SDP_HEADERS");
        sImsCodeMap.put(CODE_REJECT_ONGOING_CALL_TRANSFER, "CODE_REJECT_ONGOING_CALL_TRANSFER");
        sImsCodeMap.put(CODE_REJECT_INTERNAL_ERROR, "CODE_REJECT_INTERNAL_ERROR");
        sImsCodeMap.put(CODE_REJECT_QOS_FAILURE, "CODE_REJECT_QOS_FAILURE");
        sImsCodeMap.put(CODE_REJECT_ONGOING_HANDOVER, "CODE_REJECT_ONGOING_HANDOVER");
        sImsCodeMap.put(CODE_REJECT_VT_TTY_NOT_ALLOWED, "CODE_REJECT_VT_TTY_NOT_ALLOWED");
        sImsCodeMap.put(CODE_REJECT_ONGOING_CALL_UPGRADE, "CODE_REJECT_ONGOING_CALL_UPGRADE");
        sImsCodeMap.put(CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED,
                "CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED");
        sImsCodeMap.put(CODE_REJECT_ONGOING_CONFERENCE_CALL, "CODE_REJECT_ONGOING_CONFERENCE_CALL");
        sImsCodeMap.put(CODE_REJECT_VT_AVPF_NOT_ALLOWED, "CODE_REJECT_VT_AVPF_NOT_ALLOWED");
        sImsCodeMap.put(CODE_REJECT_ONGOING_ENCRYPTED_CALL, "CODE_REJECT_ONGOING_ENCRYPTED_CALL");
        sImsCodeMap.put(CODE_REJECT_ONGOING_CS_CALL, "CODE_REJECT_ONGOING_CS_CALL");
        sImsCodeMap.put(CODE_NETWORK_CONGESTION, "CODE_NETWORK_CONGESTION");
        sImsCodeMap.put(CODE_RETRY_ON_IMS_WITHOUT_RTT, "CODE_RETRY_ON_IMS_WITHOUT_RTT");
        sImsCodeMap.put(CODE_OEM_CAUSE_1, "CODE_OEM_CAUSE_1");
        sImsCodeMap.put(CODE_OEM_CAUSE_2, "CODE_OEM_CAUSE_2");
        sImsCodeMap.put(CODE_OEM_CAUSE_3, "CODE_OEM_CAUSE_3");
        sImsCodeMap.put(CODE_OEM_CAUSE_4, "CODE_OEM_CAUSE_4");
        sImsCodeMap.put(CODE_OEM_CAUSE_5, "CODE_OEM_CAUSE_5");
        sImsCodeMap.put(CODE_OEM_CAUSE_6, "CODE_OEM_CAUSE_6");
        sImsCodeMap.put(CODE_OEM_CAUSE_7, "CODE_OEM_CAUSE_7");
        sImsCodeMap.put(CODE_OEM_CAUSE_8, "CODE_OEM_CAUSE_8");
        sImsCodeMap.put(CODE_OEM_CAUSE_9, "CODE_OEM_CAUSE_9");
        sImsCodeMap.put(CODE_OEM_CAUSE_10, "CODE_OEM_CAUSE_10");
        sImsCodeMap.put(CODE_OEM_CAUSE_11, "CODE_OEM_CAUSE_11");
        sImsCodeMap.put(CODE_OEM_CAUSE_12, "CODE_OEM_CAUSE_12");
        sImsCodeMap.put(CODE_OEM_CAUSE_13, "CODE_OEM_CAUSE_13");
        sImsCodeMap.put(CODE_OEM_CAUSE_14, "CODE_OEM_CAUSE_14");
        sImsCodeMap.put(CODE_OEM_CAUSE_15, "CODE_OEM_CAUSE_15");
    }

    /**
     * Network string error messages.
     * mExtraMessage may have these values.
     * @hide
     */
    @SystemApi
    public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED =
            "Forbidden. Not Authorized for Service";


    /*
     * Extra codes for the specific code value
     * This value can be referred when the code is CODE_LOCAL_CALL_CS_RETRY_REQUIRED.
     */
    /**
     * An extra that may be populated when the {@link #CODE_LOCAL_CALL_CS_RETRY_REQUIRED} result has
     * been returned.
     * <p>
     * Try to connect the call using CS
     */
    public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1;
    /**
     * An extra that may be populated when the {@link #CODE_LOCAL_CALL_CS_RETRY_REQUIRED} result has
     * been returned.
     * <p>
     * Try to connect the call using CS and do not notify the user.
     */
    public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2;
    /**
     * An extra that may be populated when the {@link #CODE_LOCAL_CALL_CS_RETRY_REQUIRED} result has
     * been returned.
     * <p>
     * Try to connect the call using CS by using the settings.
     */
    public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3;

    /**
     * An extra that may be populated when the {@link #CODE_LOCAL_CALL_CS_RETRY_REQUIRED} result has
     * been returned.
     * <p>
     * Try to connect the call using CS as emergency
     */
    public static final int EXTRA_CODE_CALL_RETRY_EMERGENCY = 4;

    // For main reason code
    /** @hide */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.Q, publicAlternatives = "{@code "
            + "#getCode()}")
    public int mCode;
    // For the extra code value; it depends on the code value.
    /** @hide */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.Q, publicAlternatives = "{@code "
            + "#getExtraCode()}")
    public int mExtraCode;
    // For the additional message of the reason info.
    /** @hide */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.Q, publicAlternatives = "{@code "
            + "#getExtraMessage()}")
    public String mExtraMessage;

    /** @hide */
    public ImsReasonInfo() {
        mCode = CODE_UNSPECIFIED;
        mExtraCode = CODE_UNSPECIFIED;
        mExtraMessage = null;
    }

    private ImsReasonInfo(Parcel in) {
        mCode = in.readInt();
        mExtraCode = in.readInt();
        mExtraMessage = in.readString();
    }

    /** @hide */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    public ImsReasonInfo(int code, int extraCode) {
        mCode = code;
        mExtraCode = extraCode;
        mExtraMessage = null;
    }

    public ImsReasonInfo(@ImsCode int code, int extraCode, @Nullable String extraMessage) {
        mCode = code;
        mExtraCode = extraCode;
        mExtraMessage = extraMessage;
    }

    /**
     * @return an integer representing more information about the completion of an operation.
     */
    public @ImsCode int getCode() {
        return mCode;
    }

    /**
     * @return an optional OEM specified code that provides extra information.
     */
    public int getExtraCode() {
        return mExtraCode;
    }

    /**
     * @return an optional OEM specified string that provides extra information about the operation
     * result.
     */
    public @Nullable String getExtraMessage() {
        return mExtraMessage;
    }

    /**
     * @return the string format of {@link ImsReasonInfo}
     */
    @NonNull
    @Override
    public String toString() {
        String imsCode = (sImsCodeMap.containsKey(mCode)) ? sImsCodeMap.get(mCode) : "UNKNOWN_CODE";
        return "ImsReasonInfo :: {" + mCode + " : " + imsCode + ", "
                + mExtraCode + ", " + mExtraMessage + "}";
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull Parcel out, int flags) {
        out.writeInt(mCode);
        out.writeInt(mExtraCode);
        out.writeString(mExtraMessage);
    }

    public static final @NonNull Creator<ImsReasonInfo> CREATOR = new Creator<ImsReasonInfo>() {
        @Override
        public ImsReasonInfo createFromParcel(Parcel in) {
            return new ImsReasonInfo(in);
        }

        @Override
        public ImsReasonInfo[] newArray(int size) {
            return new ImsReasonInfo[size];
        }
    };
}
