1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.telephony;
18
19/**
20 * Contains disconnect call causes generated by the framework and the RIL.
21 * @hide
22 */
23public class DisconnectCause {
24
25    /** The disconnect cause is not valid (Not received a disconnect cause) */
26    public static final int NOT_VALID                      = -1;
27    /** Has not yet disconnected */
28    public static final int NOT_DISCONNECTED               = 0;
29    /** An incoming call that was missed and never answered */
30    public static final int INCOMING_MISSED                = 1;
31    /** Normal; Remote hangup*/
32    public static final int NORMAL                         = 2;
33    /** Normal; Local hangup */
34    public static final int LOCAL                          = 3;
35    /** Outgoing call to busy line */
36    public static final int BUSY                           = 4;
37    /** Outgoing call to congested network */
38    public static final int CONGESTION                     = 5;
39    /** Not presently used */
40    public static final int MMI                            = 6;
41    /** Invalid dial string */
42    public static final int INVALID_NUMBER                 = 7;
43    /** Cannot reach the peer */
44    public static final int NUMBER_UNREACHABLE             = 8;
45    /** Cannot reach the server */
46    public static final int SERVER_UNREACHABLE             = 9;
47    /** Invalid credentials */
48    public static final int INVALID_CREDENTIALS            = 10;
49    /** Calling from out of network is not allowed */
50    public static final int OUT_OF_NETWORK                 = 11;
51    /** Server error */
52    public static final int SERVER_ERROR                   = 12;
53    /** Client timed out */
54    public static final int TIMED_OUT                      = 13;
55    /** Client went out of network range */
56    public static final int LOST_SIGNAL                    = 14;
57    /** GSM or CDMA ACM limit exceeded */
58    public static final int LIMIT_EXCEEDED                 = 15;
59    /** An incoming call that was rejected */
60    public static final int INCOMING_REJECTED              = 16;
61    /** Radio is turned off explicitly */
62    public static final int POWER_OFF                      = 17;
63    /** Out of service */
64    public static final int OUT_OF_SERVICE                 = 18;
65    /** No ICC, ICC locked, or other ICC error */
66    public static final int ICC_ERROR                      = 19;
67    /** Call was blocked by call barring */
68    public static final int CALL_BARRED                    = 20;
69    /** Call was blocked by fixed dial number */
70    public static final int FDN_BLOCKED                    = 21;
71    /** Call was blocked by restricted all voice access */
72    public static final int CS_RESTRICTED                  = 22;
73    /** Call was blocked by restricted normal voice access */
74    public static final int CS_RESTRICTED_NORMAL           = 23;
75    /** Call was blocked by restricted emergency voice access */
76    public static final int CS_RESTRICTED_EMERGENCY        = 24;
77    /** Unassigned number */
78    public static final int UNOBTAINABLE_NUMBER            = 25;
79    /** MS is locked until next power cycle */
80    public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE  = 26;
81    /** Drop call*/
82    public static final int CDMA_DROP                      = 27;
83    /** INTERCEPT order received, MS state idle entered */
84    public static final int CDMA_INTERCEPT                 = 28;
85    /** MS has been redirected, call is cancelled */
86    public static final int CDMA_REORDER                   = 29;
87    /** Service option rejection */
88    public static final int CDMA_SO_REJECT                 = 30;
89    /** Requested service is rejected, retry delay is set */
90    public static final int CDMA_RETRY_ORDER               = 31;
91    /** Unable to obtain access to the CDMA system */
92    public static final int CDMA_ACCESS_FAILURE            = 32;
93    /** Not a preempted call */
94    public static final int CDMA_PREEMPTED                 = 33;
95    /** Not an emergency call */
96    public static final int CDMA_NOT_EMERGENCY             = 34;
97    /** Access Blocked by CDMA network */
98    public static final int CDMA_ACCESS_BLOCKED            = 35;
99    /** Unknown error or not specified */
100    public static final int ERROR_UNSPECIFIED              = 36;
101    /**
102     * Only emergency numbers are allowed, but we tried to dial
103     * a non-emergency number.
104     */
105    // TODO: This should be the same as NOT_EMERGENCY
106    public static final int EMERGENCY_ONLY                 = 37;
107    /**
108     * The supplied CALL Intent didn't contain a valid phone number.
109     */
110    public static final int NO_PHONE_NUMBER_SUPPLIED       = 38;
111    /**
112     * Our initial phone number was actually an MMI sequence.
113     */
114    public static final int DIALED_MMI                     = 39;
115    /**
116     * We tried to call a voicemail: URI but the device has no
117     * voicemail number configured.
118     */
119    public static final int VOICEMAIL_NUMBER_MISSING       = 40;
120    /**
121     * This status indicates that InCallScreen should display the
122     * CDMA-specific "call lost" dialog.  (If an outgoing call fails,
123     * and the CDMA "auto-retry" feature is enabled, *and* the retried
124     * call fails too, we display this specific dialog.)
125     *
126     * TODO: this is currently unused, since the "call lost" dialog
127     * needs to be triggered by a *disconnect* event, rather than when
128     * the InCallScreen first comes to the foreground.  For now we use
129     * the needToShowCallLostDialog field for this (see below.)
130     */
131    public static final int CDMA_CALL_LOST                 = 41;
132    /**
133     * This status indicates that the call was placed successfully,
134     * but additionally, the InCallScreen needs to display the
135     * "Exiting ECM" dialog.
136     *
137     * (Details: "Emergency callback mode" is a CDMA-specific concept
138     * where the phone disallows data connections over the cell
139     * network for some period of time after you make an emergency
140     * call.  If the phone is in ECM and you dial a non-emergency
141     * number, that automatically *cancels* ECM, but we additionally
142     * need to warn the user that ECM has been canceled (see bug
143     * 4207607.))
144     *
145     * TODO: Rethink where the best place to put this is. It is not a notification
146     * of a failure of the connection -- it is an additional message that accompanies
147     * a successful connection giving the user important information about what happened.
148     *
149     * {@hide}
150     */
151    public static final int EXITED_ECM                     = 42;
152
153    /**
154     * The outgoing call failed with an unknown cause.
155     */
156    public static final int OUTGOING_FAILURE               = 43;
157
158    /**
159     * The outgoing call was canceled by the {@link android.telecom.ConnectionService}.
160     */
161    public static final int OUTGOING_CANCELED              = 44;
162
163    /**
164     * The call, which was an IMS call, disconnected because it merged with another call.
165     */
166    public static final int IMS_MERGED_SUCCESSFULLY        = 45;
167
168    /**
169     * Stk Call Control modified DIAL request to USSD request.
170     * {@hide}
171     */
172    public static final int DIAL_MODIFIED_TO_USSD          = 46;
173    /**
174     * Stk Call Control modified DIAL request to SS request.
175     * {@hide}
176     */
177    public static final int DIAL_MODIFIED_TO_SS            = 47;
178    /**
179     * Stk Call Control modified DIAL request to DIAL with modified data.
180     * {@hide}
181     */
182    public static final int DIAL_MODIFIED_TO_DIAL          = 48;
183
184    /**
185     * The call was terminated because CDMA phone service and roaming have already been activated.
186     * {@hide}
187     */
188    public static final int CDMA_ALREADY_ACTIVATED         = 49;
189
190    /**
191     * The call was terminated because it is not possible to place a video call while TTY is
192     * enabled.
193     * {@hide}
194     */
195    public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50;
196
197    /**
198     * The call was terminated because it was pulled to another device.
199     * {@hide}
200     */
201    public static final int CALL_PULLED = 51;
202
203    /**
204     * The call was terminated because it was answered on another device.
205     * {@hide}
206     */
207    public static final int ANSWERED_ELSEWHERE = 52;
208
209    /**
210     * The call was terminated because the maximum allowable number of calls has been reached.
211     * {@hide}
212     */
213    public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 53;
214
215    /**
216     * The call was terminated because cellular data has been disabled.
217     * Used when in a video call and the user disables cellular data via the settings.
218     * {@hide}
219     */
220    public static final int DATA_DISABLED = 54;
221
222    /**
223     * The call was terminated because the data policy has disabled cellular data.
224     * Used when in a video call and the user has exceeded the device data limit.
225     * {@hide}
226     */
227    public static final int DATA_LIMIT_REACHED = 55;
228
229    /**
230     * The call being placed was detected as a call forwarding number and was being dialed while
231     * roaming on a carrier that does not allow this.
232     */
233    public static final int DIALED_CALL_FORWARDING_WHILE_ROAMING = 57;
234
235    /**
236     * The network does not accept the emergency call request because IMEI was used as
237     * identification and this cability is not supported by the network.
238     * {@hide}
239     */
240    public static final int IMEI_NOT_ACCEPTED = 58;
241
242    /**
243     * A call over WIFI was disconnected because the WIFI signal was lost or became too degraded to
244     * continue the call.
245     */
246    public static final int WIFI_LOST = 59;
247
248    /**
249     * The call has failed because of access class barring.
250     * {@hide}
251     */
252    public static final int IMS_ACCESS_BLOCKED = 60;
253
254    /**
255     * The call has ended (mid-call) because the device's battery is too low.
256     */
257    public static final int LOW_BATTERY = 61;
258
259    /**
260     * A call was not dialed because the device's battery is too low.
261     */
262    public static final int DIAL_LOW_BATTERY = 62;
263
264    /**
265     * Emergency call failed with a temporary fail cause and can be redialed on this slot.
266     * {@hide}
267     */
268    public static final int EMERGENCY_TEMP_FAILURE = 63;
269
270    /**
271     * Emergency call failed with a permanent fail cause and should not be redialed on this
272     * slot.
273     * {@hide}
274     */
275    public static final int EMERGENCY_PERM_FAILURE = 64;
276
277    /**
278     * This cause is used to report a normal event only when no other cause in the normal class
279     * applies.
280     * {@hide}
281     */
282    public static final int NORMAL_UNSPECIFIED = 65;
283
284    /**
285     * Stk Call Control modified DIAL request to video DIAL request.
286     * {@hide}
287     */
288    public static final int DIAL_MODIFIED_TO_DIAL_VIDEO = 66;
289
290    /**
291     * Stk Call Control modified Video DIAL request to SS request.
292     * {@hide}
293     */
294    public static final int DIAL_VIDEO_MODIFIED_TO_SS = 67;
295
296    /**
297     * Stk Call Control modified Video DIAL request to USSD request.
298     * {@hide}
299     */
300    public static final int DIAL_VIDEO_MODIFIED_TO_USSD = 68;
301
302    /**
303     * Stk Call Control modified Video DIAL request to DIAL request.
304     * {@hide}
305     */
306    public static final int DIAL_VIDEO_MODIFIED_TO_DIAL = 69;
307
308    /**
309     * Stk Call Control modified Video DIAL request to Video DIAL request.
310     * {@hide}
311     */
312    public static final int DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 70;
313
314    /**
315     * The network has reported that an alternative emergency number has been dialed, but the user
316     * must exit airplane mode to place the call.
317     */
318    public static final int IMS_SIP_ALTERNATE_EMERGENCY_CALL = 71;
319
320    //*********************************************************************************************
321    // When adding a disconnect type:
322    // 1) Update toString() with the newly added disconnect type.
323    // 2) Update android.telecom.DisconnectCauseUtil with any mappings to a telecom.DisconnectCause.
324    //*********************************************************************************************
325
326    /** Private constructor to avoid class instantiation. */
327    private DisconnectCause() {
328        // Do nothing.
329    }
330
331    /** Returns descriptive string for the specified disconnect cause. */
332    public static String toString(int cause) {
333        switch (cause) {
334        case NOT_DISCONNECTED:
335            return "NOT_DISCONNECTED";
336        case INCOMING_MISSED:
337            return "INCOMING_MISSED";
338        case NORMAL:
339            return "NORMAL";
340        case LOCAL:
341            return "LOCAL";
342        case BUSY:
343            return "BUSY";
344        case CONGESTION:
345            return "CONGESTION";
346        case INVALID_NUMBER:
347            return "INVALID_NUMBER";
348        case NUMBER_UNREACHABLE:
349            return "NUMBER_UNREACHABLE";
350        case SERVER_UNREACHABLE:
351            return "SERVER_UNREACHABLE";
352        case INVALID_CREDENTIALS:
353            return "INVALID_CREDENTIALS";
354        case OUT_OF_NETWORK:
355            return "OUT_OF_NETWORK";
356        case SERVER_ERROR:
357            return "SERVER_ERROR";
358        case TIMED_OUT:
359            return "TIMED_OUT";
360        case LOST_SIGNAL:
361            return "LOST_SIGNAL";
362        case LIMIT_EXCEEDED:
363            return "LIMIT_EXCEEDED";
364        case INCOMING_REJECTED:
365            return "INCOMING_REJECTED";
366        case POWER_OFF:
367            return "POWER_OFF";
368        case OUT_OF_SERVICE:
369            return "OUT_OF_SERVICE";
370        case ICC_ERROR:
371            return "ICC_ERROR";
372        case CALL_BARRED:
373            return "CALL_BARRED";
374        case FDN_BLOCKED:
375            return "FDN_BLOCKED";
376        case CS_RESTRICTED:
377            return "CS_RESTRICTED";
378        case CS_RESTRICTED_NORMAL:
379            return "CS_RESTRICTED_NORMAL";
380        case CS_RESTRICTED_EMERGENCY:
381            return "CS_RESTRICTED_EMERGENCY";
382        case UNOBTAINABLE_NUMBER:
383            return "UNOBTAINABLE_NUMBER";
384        case CDMA_LOCKED_UNTIL_POWER_CYCLE:
385            return "CDMA_LOCKED_UNTIL_POWER_CYCLE";
386        case CDMA_DROP:
387            return "CDMA_DROP";
388        case CDMA_INTERCEPT:
389            return "CDMA_INTERCEPT";
390        case CDMA_REORDER:
391            return "CDMA_REORDER";
392        case CDMA_SO_REJECT:
393            return "CDMA_SO_REJECT";
394        case CDMA_RETRY_ORDER:
395            return "CDMA_RETRY_ORDER";
396        case CDMA_ACCESS_FAILURE:
397            return "CDMA_ACCESS_FAILURE";
398        case CDMA_PREEMPTED:
399            return "CDMA_PREEMPTED";
400        case CDMA_NOT_EMERGENCY:
401            return "CDMA_NOT_EMERGENCY";
402        case CDMA_ACCESS_BLOCKED:
403            return "CDMA_ACCESS_BLOCKED";
404        case EMERGENCY_ONLY:
405            return "EMERGENCY_ONLY";
406        case NO_PHONE_NUMBER_SUPPLIED:
407            return "NO_PHONE_NUMBER_SUPPLIED";
408        case DIALED_MMI:
409            return "DIALED_MMI";
410        case VOICEMAIL_NUMBER_MISSING:
411            return "VOICEMAIL_NUMBER_MISSING";
412        case CDMA_CALL_LOST:
413            return "CDMA_CALL_LOST";
414        case EXITED_ECM:
415            return "EXITED_ECM";
416        case DIAL_MODIFIED_TO_USSD:
417            return "DIAL_MODIFIED_TO_USSD";
418        case DIAL_MODIFIED_TO_SS:
419            return "DIAL_MODIFIED_TO_SS";
420        case DIAL_MODIFIED_TO_DIAL:
421            return "DIAL_MODIFIED_TO_DIAL";
422        case DIAL_MODIFIED_TO_DIAL_VIDEO:
423            return "DIAL_MODIFIED_TO_DIAL_VIDEO";
424        case DIAL_VIDEO_MODIFIED_TO_SS:
425            return "DIAL_VIDEO_MODIFIED_TO_SS";
426        case DIAL_VIDEO_MODIFIED_TO_USSD:
427            return "DIAL_VIDEO_MODIFIED_TO_USSD";
428        case DIAL_VIDEO_MODIFIED_TO_DIAL:
429            return "DIAL_VIDEO_MODIFIED_TO_DIAL";
430        case DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO:
431            return "DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO";
432        case ERROR_UNSPECIFIED:
433            return "ERROR_UNSPECIFIED";
434        case OUTGOING_FAILURE:
435            return "OUTGOING_FAILURE";
436        case OUTGOING_CANCELED:
437            return "OUTGOING_CANCELED";
438        case IMS_MERGED_SUCCESSFULLY:
439            return "IMS_MERGED_SUCCESSFULLY";
440        case CDMA_ALREADY_ACTIVATED:
441            return "CDMA_ALREADY_ACTIVATED";
442        case VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED:
443            return "VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED";
444        case CALL_PULLED:
445            return "CALL_PULLED";
446        case ANSWERED_ELSEWHERE:
447            return "ANSWERED_ELSEWHERE";
448        case MAXIMUM_NUMBER_OF_CALLS_REACHED:
449            return "MAXIMUM_NUMER_OF_CALLS_REACHED";
450        case DATA_DISABLED:
451            return "DATA_DISABLED";
452        case DATA_LIMIT_REACHED:
453            return "DATA_LIMIT_REACHED";
454        case DIALED_CALL_FORWARDING_WHILE_ROAMING:
455            return "DIALED_CALL_FORWARDING_WHILE_ROAMING";
456        case IMEI_NOT_ACCEPTED:
457            return "IMEI_NOT_ACCEPTED";
458        case WIFI_LOST:
459            return "WIFI_LOST";
460        case IMS_ACCESS_BLOCKED:
461            return "IMS_ACCESS_BLOCKED";
462        case LOW_BATTERY:
463            return "LOW_BATTERY";
464        case DIAL_LOW_BATTERY:
465            return "DIAL_LOW_BATTERY";
466        case EMERGENCY_TEMP_FAILURE:
467            return "EMERGENCY_TEMP_FAILURE";
468        case EMERGENCY_PERM_FAILURE:
469            return "EMERGENCY_PERM_FAILURE";
470        case NORMAL_UNSPECIFIED:
471            return "NORMAL_UNSPECIFIED";
472        case IMS_SIP_ALTERNATE_EMERGENCY_CALL:
473            return "IMS_SIP_ALTERNATE_EMERGENCY_CALL";
474        default:
475            return "INVALID: " + cause;
476        }
477    }
478}
479