/*
 * Copyright (C) 2014 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;

/**
 * Contains precise disconnect call causes generated by the
 * framework and the RIL.
 *
 * @hide
 */
public class PreciseDisconnectCause {

    /** The disconnect cause is not valid (Not received a disconnect cause)*/
    public static final int NOT_VALID                                        = -1;
    /** No disconnect cause provided. Generally a local disconnect or an incoming missed call */
    public static final int NO_DISCONNECT_CAUSE_AVAILABLE                    = 0;
    /**
     * The destination cannot be reached because the number, although valid,
     * is not currently assigned
     */
    public static final int UNOBTAINABLE_NUMBER                              = 1;
    /** The user cannot be reached because the network through which the call has been
     *  routed does not serve the destination desired
     */
    public static final int NO_ROUTE_TO_DESTINATION                          = 3;
    /** The channel most recently identified is not acceptable to the sending entity for
     *  use in this call
     */
    public static final int CHANNEL_UNACCEPTABLE                             = 6;
    /** The MS has tried to access a service that the MS's network operator or service
     *  provider is not prepared to allow
     */
    public static final int OPERATOR_DETERMINED_BARRING                      = 8;
    /** One of the users involved in the call has requested that the call is cleared */
    public static final int NORMAL                                           = 16;
    /** The called user is unable to accept another call */
    public static final int BUSY                                             = 17;
    /** The user does not respond to a call establishment message with either an alerting
     *  or connect indication within the prescribed period of time allocated
     */
    public static final int NO_USER_RESPONDING                               = 18;
    /** The user has provided an alerting indication but has not provided a connect
     *  indication within a prescribed period of time
     */
    public static final int NO_ANSWER_FROM_USER                              = 19;
    /** The equipment sending this cause does not wish to accept this call */
    public static final int CALL_REJECTED                                    = 21;
    /** The called number is no longer assigned */
    public static final int NUMBER_CHANGED                                   = 22;
    /** This cause is returned to the network when a mobile station clears an active
     *  call which is being pre-empted by another call with higher precedence
     */
    public static final int PREEMPTION                                       = 25;
    /** The destination indicated by the mobile station cannot be reached because
     *  the interface to the destination is not functioning correctly
     */
    public static final int DESTINATION_OUT_OF_ORDER                         = 27;
    /** The called party number is not a valid format or is not complete */
    public static final int INVALID_NUMBER_FORMAT                            = 28;
    /** The facility requested by user can not be provided by the network */
    public static final int FACILITY_REJECTED                                = 29;
    /** Provided in response to a STATUS ENQUIRY message */
    public static final int STATUS_ENQUIRY                                   = 30;
    /** Reports a normal disconnect only when no other normal cause applies */
    public static final int NORMAL_UNSPECIFIED                               = 31;
    /** There is no channel presently available to handle the call */
    public static final int NO_CIRCUIT_AVAIL                                 = 34;
    /** The network is not functioning correctly and that the condition is likely
     *  to last a relatively long period of time
     */
    public static final int NETWORK_OUT_OF_ORDER                             = 38;
    /**
     * The network is not functioning correctly and the condition is not likely to last
     * a long period of time
     */
    public static final int TEMPORARY_FAILURE                                = 41;
    /** The switching equipment is experiencing a period of high traffic */
    public static final int SWITCHING_CONGESTION                             = 42;
    /** The network could not deliver access information to the remote user as requested */
    public static final int ACCESS_INFORMATION_DISCARDED                     = 43;
    /** The channel cannot be provided */
    public static final int CHANNEL_NOT_AVAIL                                = 44;
    /** This cause is used to report a resource unavailable event only when no other
     *  cause in the resource unavailable class applies
     */
    public static final int RESOURCES_UNAVAILABLE_OR_UNSPECIFIED             = 44;
    /** The requested quality of service (ITU-T X.213) cannot be provided */
    public static final int QOS_NOT_AVAIL                                    = 49;
    /** The facility could not be provided by the network because the user has no
     *  complete subscription
     */
    public static final int REQUESTED_FACILITY_NOT_SUBSCRIBED                = 50;
    /** Incoming calls are not allowed within this CUG */
    public static final int INCOMING_CALLS_BARRED_WITHIN_CUG                 = 55;
    /** The mobile station is not authorized to use bearer capability requested */
    public static final int BEARER_CAPABILITY_NOT_AUTHORIZED                 = 57;
    /** The requested bearer capability is not available at this time */
    public static final int BEARER_NOT_AVAIL                                 = 58;
    /** The service option is not availble at this time */
    public static final int SERVICE_OPTION_NOT_AVAILABLE                     = 63;
    /** The equipment sending this cause does not support the bearer capability requested */
    public static final int BEARER_SERVICE_NOT_IMPLEMENTED                   = 65;
    /** The call clearing is due to ACM being greater than or equal to ACMmax */
    public static final int ACM_LIMIT_EXCEEDED                               = 68;
    /** The equipment sending this cause does not support the requested facility */
    public static final int REQUESTED_FACILITY_NOT_IMPLEMENTED               = 69;
    /** The equipment sending this cause only supports the restricted version of
     *  the requested bearer capability
     */
    public static final int ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE        = 70;
    /** The service requested is not implemented at network */
    public static final int SERVICE_OR_OPTION_NOT_IMPLEMENTED                = 79;
    /** The equipment sending this cause has received a message with a transaction identifier
     *  which is not currently in use on the MS-network interface
     */
    public static final int INVALID_TRANSACTION_IDENTIFIER                   = 81;
    /** The called user for the incoming CUG call is not a member of the specified CUG */
    public static final int USER_NOT_MEMBER_OF_CUG                           = 87;
    /** The equipment sending this cause has received a request which can't be accomodated */
    public static final int INCOMPATIBLE_DESTINATION                         = 88;
    /** This cause is used to report receipt of a message with semantically incorrect contents */
    public static final int SEMANTICALLY_INCORRECT_MESSAGE                   = 95;
    /** The equipment sending this cause has received a message with a non-semantical
     *  mandatory IE error
     */
    public static final int INVALID_MANDATORY_INFORMATION                    = 96;
    /** This is sent in response to a message which is not defined, or defined but not
     *  implemented by the equipment sending this cause
     */
    public static final int MESSAGE_TYPE_NON_IMPLEMENTED                     = 97;
    /** The equipment sending this cause has received a message not compatible with the
     *  protocol state
     */
    public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE  = 98;
    /** The equipment sending this cause has received a message which includes information
     *  elements not recognized because its identifier is not defined or it is defined but not
     *  implemented by the equipment sending the cause
     */
    public static final int INFORMATION_ELEMENT_NON_EXISTENT                 = 99;
    /** The equipment sending this cause has received a message with conditional IE errors */
    public static final int CONDITIONAL_IE_ERROR                             = 100;
    /** The message has been received which is incompatible with the protocol state */
    public static final int MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE       = 101;
    /** The  procedure has been initiated by the expiry of a timer in association with
     *  3GPP TS 24.008 error handling procedures
     */
    public static final int RECOVERY_ON_TIMER_EXPIRED                        = 102;
    /** This protocol error event is reported only when no other cause in the protocol
     *  error class applies
     */
    public static final int PROTOCOL_ERROR_UNSPECIFIED                       = 111;
    /** interworking with a network which does not provide causes for actions it takes
     *  thus, the precise cause for a message which is being sent cannot be ascertained
     */
    public static final int INTERWORKING_UNSPECIFIED                         = 127;
    /** The call is restricted */
    public static final int CALL_BARRED                                      = 240;
    /** The call is blocked by the Fixed Dialing Number list */
    public static final int FDN_BLOCKED                                      = 241;
    /** The given IMSI is not known at the VLR */
    /** TS 24.008 cause 4 */
    public static final int IMSI_UNKNOWN_IN_VLR                              = 242;
    /**
     * The network does not accept emergency call establishment using an IMEI or not accept attach
     * procedure for emergency services using an IMEI
     */
    public static final int IMEI_NOT_ACCEPTED                                = 243;
    /** The call cannot be established because RADIO is OFF */
    public static final int RADIO_OFF                                        = 247;
    /** The call cannot be established because of no cell coverage */
    public static final int OUT_OF_SRV                                       = 248;
    /** The call cannot be established because of no valid SIM */
    public static final int NO_VALID_SIM                                     = 249;
    /** The call is dropped or failed internally by modem */
    public static final int RADIO_INTERNAL_ERROR                             = 250;
    /** Call failed because of UE timer expired while waiting for a response from network */
    public static final int NETWORK_RESP_TIMEOUT                             = 251;
    /** Call failed because of a network reject */
    public static final int NETWORK_REJECT                                   = 252;
    /** Call failed because of radio access failure. ex. RACH failure */
    public static final int RADIO_ACCESS_FAILURE                             = 253;
    /** Call failed/dropped because of a RLF */
    public static final int RADIO_LINK_FAILURE                               = 254;
    /** Call failed/dropped because of radio link lost */
    public static final int RADIO_LINK_LOST                                  = 255;
    /** Call failed because of a radio uplink issue */
    public static final int RADIO_UPLINK_FAILURE                             = 256;
    /** Call failed because of a RRC connection setup failure */
    public static final int RADIO_SETUP_FAILURE                              = 257;
    /** Call failed/dropped because of RRC connection release from NW */
    public static final int RADIO_RELEASE_NORMAL                             = 258;
    /** Call failed/dropped because of RRC abnormally released by modem/network */
    public static final int RADIO_RELEASE_ABNORMAL                           = 259;
    /** Call setup failed because of access class barring */
    public static final int ACCESS_CLASS_BLOCKED                             = 260;
    /** Call failed/dropped because of a network detach */
    public static final int NETWORK_DETACH                                   = 261;

    /** MS is locked until next power cycle */
    public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE                    = 1000;
    /** Drop call*/
    public static final int CDMA_DROP                                        = 1001;
    /** INTERCEPT order received, MS state idle entered */
    public static final int CDMA_INTERCEPT                                   = 1002;
    /** MS has been redirected, call is cancelled */
    public static final int CDMA_REORDER                                     = 1003;
    /** Service option rejection */
    public static final int CDMA_SO_REJECT                                   = 1004;
    /** Requested service is rejected, retry delay is set */
    public static final int CDMA_RETRY_ORDER                                 = 1005;
    /** Unable to obtain access to the CDMA system */
    public static final int CDMA_ACCESS_FAILURE                              = 1006;
    /** Not a preempted call */
    public static final int CDMA_PREEMPTED                                   = 1007;
    /** Not an emergency call */
    public static final int CDMA_NOT_EMERGENCY                               = 1008;
    /** Access Blocked by CDMA network */
    public static final int CDMA_ACCESS_BLOCKED                              = 1009;

    /** Mapped from ImsReasonInfo */
    /* The passed argument is an invalid */
    public static final int LOCAL_ILLEGAL_ARGUMENT                           = 1200;
    // The operation is invoked in invalid call state
    public static final int LOCAL_ILLEGAL_STATE                              = 1201;
    // IMS service internal error
    public static final int LOCAL_INTERNAL_ERROR                             = 1202;
    // IMS service goes down (service connection is lost)
    public static final int LOCAL_IMS_SERVICE_DOWN                           = 1203;
    // No pending incoming call exists
    public static final int LOCAL_NO_PENDING_CALL                            = 1204;
    // Service unavailable; by power off
    public static final int LOCAL_POWER_OFF                                  = 1205;
    // Service unavailable; by low battery
    public static final int LOCAL_LOW_BATTERY                                = 1206;
    // Service unavailable; by out of service (data service state)
    public static final int LOCAL_NETWORK_NO_SERVICE                         = 1207;
    /* Service unavailable; by no LTE coverage
     * (VoLTE is not supported even though IMS is registered)
     */
    public static final int LOCAL_NETWORK_NO_LTE_COVERAGE                    = 1208;
    /** Service unavailable; by located in roaming area */
    public static final int LOCAL_NETWORK_ROAMING                            = 1209;
    /** Service unavailable; by IP changed */
    public static final int LOCAL_NETWORK_IP_CHANGED                         = 1210;
    /** Service unavailable; other */
    public static final int LOCAL_SERVICE_UNAVAILABLE                        = 1211;
    /* Service unavailable; IMS connection is lost (IMS is not registered) */
    public static final int LOCAL_NOT_REGISTERED                             = 1212;
    /** Max call exceeded */
    public static final int LOCAL_MAX_CALL_EXCEEDED                          = 1213;
    /** Call decline */
    public static final int LOCAL_CALL_DECLINE                               = 1214;
    /** SRVCC is in progress */
    public static final int LOCAL_CALL_VCC_ON_PROGRESSING                    = 1215;
    /** Resource reservation is failed (QoS precondition) */
    public static final int LOCAL_CALL_RESOURCE_RESERVATION_FAILED           = 1216;
    /** Retry CS call; VoLTE service can't be provided by the network or remote end
     *  Resolve the extra code(EXTRA_CODE_CALL_RETRY_*) if the below code is set
     */
    public static final int LOCAL_CALL_CS_RETRY_REQUIRED                     = 1217;
    /** Retry VoLTE call; VoLTE service can't be provided by the network temporarily */
    public static final int LOCAL_CALL_VOLTE_RETRY_REQUIRED                  = 1218;
    /** IMS call is already terminated (in TERMINATED state) */
    public static final int LOCAL_CALL_TERMINATED                            = 1219;
    /** Handover not feasible */
    public static final int LOCAL_HO_NOT_FEASIBLE                            = 1220;

    /** 1xx waiting timer is expired after sending INVITE request (MO only) */
    public static final int TIMEOUT_1XX_WAITING                              = 1221;
    /** User no 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 TIMEOUT_NO_ANSWER                                = 1222;
    /** 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 TIMEOUT_NO_ANSWER_CALL_UPDATE                    = 1223;

    /**
     * STATUSCODE (SIP response code) (IMS -> Telephony)
     */
    /** SIP request is redirected */
    public static final int SIP_REDIRECTED                                   = 1300;
    /** 4xx responses */
    /** 400 : Bad Request */
    public static final int SIP_BAD_REQUEST                                  = 1310;
    /** 403 : Forbidden */
    public static final int SIP_FORBIDDEN                                    = 1311;
    /** 404 : Not Found */
    public static final int SIP_NOT_FOUND                                    = 1312;
    /** 415 : Unsupported Media Type
     *  416 : Unsupported URI Scheme
     *  420 : Bad Extension
     */
    public static final int SIP_NOT_SUPPORTED                                = 1313;
    /** 408 : Request Timeout */
    public static final int SIP_REQUEST_TIMEOUT                              = 1314;
    /** 480 : Temporarily Unavailable */
    public static final int SIP_TEMPRARILY_UNAVAILABLE                       = 1315;
    /** 484 : Address Incomplete */
    public static final int SIP_BAD_ADDRESS                                  = 1316;
    /** 486 : Busy Here
     *  600 : Busy Everywhere
     */
    public static final int SIP_BUSY                                         = 1317;
    /** 487 : Request Terminated */
    public static final int SIP_REQUEST_CANCELLED                            = 1318;
    /** 406 : Not Acceptable
     *  488 : Not Acceptable Here
     *  606 : Not Acceptable
     */
    public static final int SIP_NOT_ACCEPTABLE                               = 1319;
    /** 410 : Gone
     *  604 : Does Not Exist Anywhere
     */
    public static final int SIP_NOT_REACHABLE                                = 1320;
    /** Others */
    public static final int SIP_CLIENT_ERROR                                 = 1321;
    /** 5xx responses
     *  501 : Server Internal Error
     */
    public static final int SIP_SERVER_INTERNAL_ERROR                        = 1330;
    /** 503 : Service Unavailable */
    public static final int SIP_SERVICE_UNAVAILABLE                          = 1331;
    /** 504 : Server Time-out */
    public static final int SIP_SERVER_TIMEOUT                               = 1332;
    /** Others */
    public static final int SIP_SERVER_ERROR                                 = 1333;
    /** 6xx responses
     *  603 : Decline
     */
    public static final int SIP_USER_REJECTED                                = 1340;
    /** Others */
    public static final int SIP_GLOBAL_ERROR                                 = 1341;
    /** Emergency failure */
    public static final int EMERGENCY_TEMP_FAILURE                           = 1342;
    public static final int EMERGENCY_PERM_FAILURE                           = 1343;
    /** Media resource initialization failed */
    public static final int MEDIA_INIT_FAILED                                = 1400;
    /** RTP timeout (no audio / video traffic in the session) */
    public static final int MEDIA_NO_DATA                                    = 1401;
    /** Media is not supported; so dropped the call */
    public static final int MEDIA_NOT_ACCEPTABLE                             = 1402;
    /** Unknown media related errors */
    public static final int MEDIA_UNSPECIFIED                                = 1403;
    /** User triggers the call end */
    public static final int USER_TERMINATED                                  = 1500;
    /** No action while an incoming call is ringing */
    public static final int USER_NOANSWER                                    = 1501;
    /** User ignores an incoming call */
    public static final int USER_IGNORE                                      = 1502;
    /** User declines an incoming call */
    public static final int USER_DECLINE                                     = 1503;
    /** Device declines/ends a call due to low battery */
    public static final int LOW_BATTERY                                      = 1504;
    /** Device declines call due to blacklisted call ID */
    public static final int BLACKLISTED_CALL_ID                              = 1505;
    /** The call is terminated by the network or remote user */
    public static final int USER_TERMINATED_BY_REMOTE                        = 1510;

    /**
     * UT
     */
    public static final int UT_NOT_SUPPORTED                                 = 1800;
    public static final int UT_SERVICE_UNAVAILABLE                           = 1801;
    public static final int UT_OPERATION_NOT_ALLOWED                         = 1802;
    public static final int UT_NETWORK_ERROR                                 = 1803;
    public static final int UT_CB_PASSWORD_MISMATCH                          = 1804;

    /**
     * ECBM
     */
    public static final int ECBM_NOT_SUPPORTED                               = 1900;

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

    /**
     * CALL DROP error codes (Call could drop because of many reasons like Network not available,
     *  handover, failed, etc)
     */

    /**
     * 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 CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE               = 2000;

    /**
     * MT call has ended due to a release from the network
     * because the call was answered elsewhere
     */
    public static final int ANSWERED_ELSEWHERE                               = 2100;

    /**
     * For MultiEndpoint - Call Pull request has failed
     */
    public static final int CALL_PULL_OUT_OF_SYNC                            = 2101;

    /**
     * For MultiEndpoint - Call has been pulled from primary to secondary
     */
    public static final int CALL_PULLED                                      = 2102;

    /**
     * Supplementary services (HOLD/RESUME) failure error codes.
     * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision.
     */
    public static final int SUPP_SVC_FAILED                                  = 2300;
    public static final int SUPP_SVC_CANCELLED                               = 2301;
    public static final int SUPP_SVC_REINVITE_COLLISION                      = 2302;

    /**
     * DPD Procedure received no response or send failed
     */
    public static final int IWLAN_DPD_FAILURE                                = 2400;

    /**
     * Establishment of the ePDG Tunnel Failed
     */
    public static final int EPDG_TUNNEL_ESTABLISH_FAILURE                    = 2500;

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

    /**
     * Connection to the packet gateway is lost
     */
    public static final int EPDG_TUNNEL_LOST_CONNECTION                      = 2502;

    /**
     * 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 MAXIMUM_NUMBER_OF_CALLS_REACHED                  = 2503;

    /**
     * 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 REMOTE_CALL_DECLINE                              = 2504;

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

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

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


    /* 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 OEM_CAUSE_1                                      = 0xf001;
    public static final int OEM_CAUSE_2                                      = 0xf002;
    public static final int OEM_CAUSE_3                                      = 0xf003;
    public static final int OEM_CAUSE_4                                      = 0xf004;
    public static final int OEM_CAUSE_5                                      = 0xf005;
    public static final int OEM_CAUSE_6                                      = 0xf006;
    public static final int OEM_CAUSE_7                                      = 0xf007;
    public static final int OEM_CAUSE_8                                      = 0xf008;
    public static final int OEM_CAUSE_9                                      = 0xf009;
    public static final int OEM_CAUSE_10                                     = 0xf00a;
    public static final int OEM_CAUSE_11                                     = 0xf00b;
    public static final int OEM_CAUSE_12                                     = 0xf00c;
    public static final int OEM_CAUSE_13                                     = 0xf00d;
    public static final int OEM_CAUSE_14                                     = 0xf00e;
    public static final int OEM_CAUSE_15                                     = 0xf00f;

    /** Disconnected due to unspecified reasons */
    public static final int ERROR_UNSPECIFIED                                = 0xffff;

    /** Private constructor to avoid class instantiation. */
    private PreciseDisconnectCause() {
        // Do nothing.
    }
}
