/* * 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 disconnect call causes generated by the framework and the RIL. * @hide */ public class DisconnectCause { /** The disconnect cause is not valid (Not received a disconnect cause) */ public static final int NOT_VALID = -1; /** Has not yet disconnected */ public static final int NOT_DISCONNECTED = 0; /** An incoming call that was missed and never answered */ public static final int INCOMING_MISSED = 1; /** Normal; Remote hangup*/ public static final int NORMAL = 2; /** Normal; Local hangup */ public static final int LOCAL = 3; /** Outgoing call to busy line */ public static final int BUSY = 4; /** Outgoing call to congested network */ public static final int CONGESTION = 5; /** Not presently used */ public static final int MMI = 6; /** Invalid dial string */ public static final int INVALID_NUMBER = 7; /** Cannot reach the peer */ public static final int NUMBER_UNREACHABLE = 8; /** Cannot reach the server */ public static final int SERVER_UNREACHABLE = 9; /** Invalid credentials */ public static final int INVALID_CREDENTIALS = 10; /** Calling from out of network is not allowed */ public static final int OUT_OF_NETWORK = 11; /** Server error */ public static final int SERVER_ERROR = 12; /** Client timed out */ public static final int TIMED_OUT = 13; /** Client went out of network range */ public static final int LOST_SIGNAL = 14; /** GSM or CDMA ACM limit exceeded */ public static final int LIMIT_EXCEEDED = 15; /** An incoming call that was rejected */ public static final int INCOMING_REJECTED = 16; /** Radio is turned off explicitly */ public static final int POWER_OFF = 17; /** Out of service */ public static final int OUT_OF_SERVICE = 18; /** No ICC, ICC locked, or other ICC error */ public static final int ICC_ERROR = 19; /** Call was blocked by call barring */ public static final int CALL_BARRED = 20; /** Call was blocked by fixed dial number */ public static final int FDN_BLOCKED = 21; /** Call was blocked by restricted all voice access */ public static final int CS_RESTRICTED = 22; /** Call was blocked by restricted normal voice access */ public static final int CS_RESTRICTED_NORMAL = 23; /** Call was blocked by restricted emergency voice access */ public static final int CS_RESTRICTED_EMERGENCY = 24; /** Unassigned number */ public static final int UNOBTAINABLE_NUMBER = 25; /** MS is locked until next power cycle */ public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 26; /** Drop call*/ public static final int CDMA_DROP = 27; /** INTERCEPT order received, MS state idle entered */ public static final int CDMA_INTERCEPT = 28; /** MS has been redirected, call is cancelled */ public static final int CDMA_REORDER = 29; /** Service option rejection */ public static final int CDMA_SO_REJECT = 30; /** Requested service is rejected, retry delay is set */ public static final int CDMA_RETRY_ORDER = 31; /** Unable to obtain access to the CDMA system */ public static final int CDMA_ACCESS_FAILURE = 32; /** Not a preempted call */ public static final int CDMA_PREEMPTED = 33; /** Not an emergency call */ public static final int CDMA_NOT_EMERGENCY = 34; /** Access Blocked by CDMA network */ public static final int CDMA_ACCESS_BLOCKED = 35; /** Unknown error or not specified */ public static final int ERROR_UNSPECIFIED = 36; /** * Only emergency numbers are allowed, but we tried to dial * a non-emergency number. */ // TODO: This should be the same as NOT_EMERGENCY public static final int EMERGENCY_ONLY = 37; /** * The supplied CALL Intent didn't contain a valid phone number. */ public static final int NO_PHONE_NUMBER_SUPPLIED = 38; /** * Our initial phone number was actually an MMI sequence. */ public static final int DIALED_MMI = 39; /** * We tried to call a voicemail: URI but the device has no * voicemail number configured. */ public static final int VOICEMAIL_NUMBER_MISSING = 40; /** * This status indicates that InCallScreen should display the * CDMA-specific "call lost" dialog. (If an outgoing call fails, * and the CDMA "auto-retry" feature is enabled, *and* the retried * call fails too, we display this specific dialog.) * * TODO: this is currently unused, since the "call lost" dialog * needs to be triggered by a *disconnect* event, rather than when * the InCallScreen first comes to the foreground. For now we use * the needToShowCallLostDialog field for this (see below.) */ public static final int CDMA_CALL_LOST = 41; /** * This status indicates that the call was placed successfully, * but additionally, the InCallScreen needs to display the * "Exiting ECM" dialog. * * (Details: "Emergency callback mode" is a CDMA-specific concept * where the phone disallows data connections over the cell * network for some period of time after you make an emergency * call. If the phone is in ECM and you dial a non-emergency * number, that automatically *cancels* ECM, but we additionally * need to warn the user that ECM has been canceled (see bug * 4207607.)) * * TODO: Rethink where the best place to put this is. It is not a notification * of a failure of the connection -- it is an additional message that accompanies * a successful connection giving the user important information about what happened. * * {@hide} */ public static final int EXITED_ECM = 42; /** * The outgoing call failed with an unknown cause. */ public static final int OUTGOING_FAILURE = 43; /** * The outgoing call was canceled by the {@link android.telecom.ConnectionService}. */ public static final int OUTGOING_CANCELED = 44; /** * The call, which was an IMS call, disconnected because it merged with another call. */ public static final int IMS_MERGED_SUCCESSFULLY = 45; /** * Stk Call Control modified DIAL request to USSD request. * {@hide} */ public static final int DIAL_MODIFIED_TO_USSD = 46; /** * Stk Call Control modified DIAL request to SS request. * {@hide} */ public static final int DIAL_MODIFIED_TO_SS = 47; /** * Stk Call Control modified DIAL request to DIAL with modified data. * {@hide} */ public static final int DIAL_MODIFIED_TO_DIAL = 48; /** * The call was terminated because CDMA phone service and roaming have already been activated. * {@hide} */ public static final int CDMA_ALREADY_ACTIVATED = 49; /** * The call was terminated because it is not possible to place a video call while TTY is * enabled. * {@hide} */ public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50; /** * The call was terminated because it was pulled to another device. * {@hide} */ public static final int CALL_PULLED = 51; /** * The call was terminated because it was answered on another device. * {@hide} */ public static final int ANSWERED_ELSEWHERE = 52; /** * The call was terminated because the maximum allowable number of calls has been reached. * {@hide} */ public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 53; /** * The call was terminated because cellular data has been disabled. * Used when in a video call and the user disables cellular data via the settings. * {@hide} */ public static final int DATA_DISABLED = 54; /** * The call was terminated because the data policy has disabled cellular data. * Used when in a video call and the user has exceeded the device data limit. * {@hide} */ public static final int DATA_LIMIT_REACHED = 55; /** * The emergency call was terminated because it was dialed on the wrong SIM slot. * The call needs to be redialed the other slot. * {@hide} */ public static final int DIALED_ON_WRONG_SLOT = 56; /** * The call being placed was detected as a call forwarding number and was being dialed while * roaming on a carrier that does not allow this. */ public static final int DIALED_CALL_FORWARDING_WHILE_ROAMING = 57; /** * The network does not accept the emergency call request because IMEI was used as * identification and this cability is not supported by the network. * {@hide} */ public static final int IMEI_NOT_ACCEPTED = 58; /** * A call over WIFI was disconnected because the WIFI signal was lost or became too degraded to * continue the call. */ public static final int WIFI_LOST = 59; /** * The call has failed because of access class barring. * {@hide} */ public static final int IMS_ACCESS_BLOCKED = 60; /** * The call has ended (mid-call) because the device's battery is too low. */ public static final int LOW_BATTERY = 61; /** * A call was not dialed because the device's battery is too low. */ public static final int DIAL_LOW_BATTERY = 62; //********************************************************************************************* // 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. //********************************************************************************************* /** Private constructor to avoid class instantiation. */ private DisconnectCause() { // Do nothing. } /** Returns descriptive string for the specified disconnect cause. */ public static String toString(int cause) { switch (cause) { case NOT_DISCONNECTED: return "NOT_DISCONNECTED"; case INCOMING_MISSED: return "INCOMING_MISSED"; case NORMAL: return "NORMAL"; case LOCAL: return "LOCAL"; case BUSY: return "BUSY"; case CONGESTION: return "CONGESTION"; case INVALID_NUMBER: return "INVALID_NUMBER"; case NUMBER_UNREACHABLE: return "NUMBER_UNREACHABLE"; case SERVER_UNREACHABLE: return "SERVER_UNREACHABLE"; case INVALID_CREDENTIALS: return "INVALID_CREDENTIALS"; case OUT_OF_NETWORK: return "OUT_OF_NETWORK"; case SERVER_ERROR: return "SERVER_ERROR"; case TIMED_OUT: return "TIMED_OUT"; case LOST_SIGNAL: return "LOST_SIGNAL"; case LIMIT_EXCEEDED: return "LIMIT_EXCEEDED"; case INCOMING_REJECTED: return "INCOMING_REJECTED"; case POWER_OFF: return "POWER_OFF"; case OUT_OF_SERVICE: return "OUT_OF_SERVICE"; case ICC_ERROR: return "ICC_ERROR"; case CALL_BARRED: return "CALL_BARRED"; case FDN_BLOCKED: return "FDN_BLOCKED"; case CS_RESTRICTED: return "CS_RESTRICTED"; case CS_RESTRICTED_NORMAL: return "CS_RESTRICTED_NORMAL"; case CS_RESTRICTED_EMERGENCY: return "CS_RESTRICTED_EMERGENCY"; case UNOBTAINABLE_NUMBER: return "UNOBTAINABLE_NUMBER"; case CDMA_LOCKED_UNTIL_POWER_CYCLE: return "CDMA_LOCKED_UNTIL_POWER_CYCLE"; case CDMA_DROP: return "CDMA_DROP"; case CDMA_INTERCEPT: return "CDMA_INTERCEPT"; case CDMA_REORDER: return "CDMA_REORDER"; case CDMA_SO_REJECT: return "CDMA_SO_REJECT"; case CDMA_RETRY_ORDER: return "CDMA_RETRY_ORDER"; case CDMA_ACCESS_FAILURE: return "CDMA_ACCESS_FAILURE"; case CDMA_PREEMPTED: return "CDMA_PREEMPTED"; case CDMA_NOT_EMERGENCY: return "CDMA_NOT_EMERGENCY"; case CDMA_ACCESS_BLOCKED: return "CDMA_ACCESS_BLOCKED"; case EMERGENCY_ONLY: return "EMERGENCY_ONLY"; case NO_PHONE_NUMBER_SUPPLIED: return "NO_PHONE_NUMBER_SUPPLIED"; case DIALED_MMI: return "DIALED_MMI"; case VOICEMAIL_NUMBER_MISSING: return "VOICEMAIL_NUMBER_MISSING"; case CDMA_CALL_LOST: return "CDMA_CALL_LOST"; case EXITED_ECM: return "EXITED_ECM"; case DIAL_MODIFIED_TO_USSD: return "DIAL_MODIFIED_TO_USSD"; case DIAL_MODIFIED_TO_SS: return "DIAL_MODIFIED_TO_SS"; case DIAL_MODIFIED_TO_DIAL: return "DIAL_MODIFIED_TO_DIAL"; case ERROR_UNSPECIFIED: return "ERROR_UNSPECIFIED"; case OUTGOING_FAILURE: return "OUTGOING_FAILURE"; case OUTGOING_CANCELED: return "OUTGOING_CANCELED"; case IMS_MERGED_SUCCESSFULLY: return "IMS_MERGED_SUCCESSFULLY"; case CDMA_ALREADY_ACTIVATED: return "CDMA_ALREADY_ACTIVATED"; case VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED: return "VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED"; case CALL_PULLED: return "CALL_PULLED"; case ANSWERED_ELSEWHERE: return "ANSWERED_ELSEWHERE"; case MAXIMUM_NUMBER_OF_CALLS_REACHED: return "MAXIMUM_NUMER_OF_CALLS_REACHED"; case DATA_DISABLED: return "DATA_DISABLED"; case DATA_LIMIT_REACHED: return "DATA_LIMIT_REACHED"; case DIALED_ON_WRONG_SLOT: return "DIALED_ON_WRONG_SLOT"; case DIALED_CALL_FORWARDING_WHILE_ROAMING: return "DIALED_CALL_FORWARDING_WHILE_ROAMING"; case IMEI_NOT_ACCEPTED: return "IMEI_NOT_ACCEPTED"; case WIFI_LOST: return "WIFI_LOST"; case IMS_ACCESS_BLOCKED: return "IMS_ACCESS_BLOCKED"; case LOW_BATTERY: return "LOW_BATTERY"; case DIAL_LOW_BATTERY: return "DIAL_LOW_BATTERY"; default: return "INVALID: " + cause; } } }