1aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee/** 2aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * Copyright (C) 2014 The Android Open Source Project 3aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * 4aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * Licensed under the Apache License, Version 2.0 (the "License"); 5aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * you may not use this file except in compliance with the License. 6aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * You may obtain a copy of the License at 7aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * 8aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * http://www.apache.org/licenses/LICENSE-2.0 9aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * 10aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * Unless required by applicable law or agreed to in writing, software 11aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * distributed under the License is distributed on an "AS IS" BASIS, 12aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * See the License for the specific language governing permissions and 14aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * limitations under the License. 15aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee */ 16aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 17aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Leepackage com.android.services.telephony; 18aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 19aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Leeimport android.content.Context; 20aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Leeimport android.media.ToneGenerator; 21aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Leeimport android.telecom.DisconnectCause; 22aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 231d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiongimport com.android.internal.telephony.CallFailCause; 242880ad7c1f17ff21e4517d857c1928fce1b5be28Brad Ebingerimport com.android.phone.ImsUtil; 25aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Leeimport com.android.phone.PhoneGlobals; 26aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Leeimport com.android.phone.common.R; 27aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 28aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Leepublic class DisconnectCauseUtil { 29aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 30aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee /** 3123913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more 3223913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * generic {@link android.telecom.DisconnectCause} object, possibly populated with a localized 3323913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * message and tone. 34aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * 35aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * @param telephonyDisconnectCause The code for the reason for the disconnect. 36aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee */ 37aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee public static DisconnectCause toTelecomDisconnectCause(int telephonyDisconnectCause) { 381d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong return toTelecomDisconnectCause(telephonyDisconnectCause, 391d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong CallFailCause.NOT_VALID, null /* reason */); 40aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 41aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 42aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee /** 4323913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more 4423913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * generic {@link android.telecom.DisconnectCause}.object, possibly populated with a localized 4523913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * message and tone. 46aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * 47aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * @param telephonyDisconnectCause The code for the reason for the disconnect. 48aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * @param reason Description of the reason for the disconnect, not intended for the user to see.. 49aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee */ 50aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee public static DisconnectCause toTelecomDisconnectCause( 51aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee int telephonyDisconnectCause, String reason) { 521d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong return toTelecomDisconnectCause(telephonyDisconnectCause, CallFailCause.NOT_VALID, reason); 531d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong } 541d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong 551d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong /** 561d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more 571d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * generic {@link android.telecom.DisconnectCause}.object, possibly populated with a localized 581d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * message and tone. 591d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * 601d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * @param telephonyDisconnectCause The code for the reason for the disconnect. 611d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * @param telephonyPerciseDisconnectCause The code for the percise reason for the disconnect. 621d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * @param reason Description of the reason for the disconnect, not intended for the user to see.. 631d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong */ 641d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong public static DisconnectCause toTelecomDisconnectCause( 651d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong int telephonyDisconnectCause, int telephonyPerciseDisconnectCause, String reason) { 66aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee Context context = PhoneGlobals.getInstance(); 67aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return new DisconnectCause( 68aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee toTelecomDisconnectCauseCode(telephonyDisconnectCause), 691d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong toTelecomDisconnectCauseLabel(context, telephonyDisconnectCause, 701d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong telephonyPerciseDisconnectCause), 71aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee toTelecomDisconnectCauseDescription(context, telephonyDisconnectCause), 7223913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn toTelecomDisconnectReason(context,telephonyDisconnectCause, reason), 73aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee toTelecomDisconnectCauseTone(telephonyDisconnectCause)); 74aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 75aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 76aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee /** 77aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * Convert the {@link android.telephony.DisconnectCause} disconnect code into a 78aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * {@link android.telecom.DisconnectCause} disconnect code. 79aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * @return The disconnect code as defined in {@link android.telecom.DisconnectCause}. 80aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee */ 81aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee private static int toTelecomDisconnectCauseCode(int telephonyDisconnectCause) { 82aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee switch (telephonyDisconnectCause) { 83aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.LOCAL: 84aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.LOCAL; 85aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 86aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.NORMAL: 877280a6ae12d2f66da1cd74f119002437394095a9qingbiao.meng case android.telephony.DisconnectCause.NORMAL_UNSPECIFIED: 88aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.REMOTE; 89aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 90aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.OUTGOING_CANCELED: 91aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.CANCELED; 92aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 93aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.INCOMING_MISSED: 94aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.MISSED; 95aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 96aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.INCOMING_REJECTED: 97aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.REJECTED; 98aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 99aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.BUSY: 100aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.BUSY; 101aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 102aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CALL_BARRED: 10392c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_ACCESS_BLOCKED: 10492c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_NOT_EMERGENCY: 105aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CS_RESTRICTED: 106aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CS_RESTRICTED_EMERGENCY: 10792c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CS_RESTRICTED_NORMAL: 10892c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.EMERGENCY_ONLY: 10992c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.FDN_BLOCKED: 11092c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.LIMIT_EXCEEDED: 1112d6dc18f9cb17c4f35fdb594eb90003764bb9336Tyler Gunn case android.telephony.DisconnectCause.VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED: 112aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.RESTRICTED; 113aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 11492c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_ACCESS_FAILURE: 1158fb4b652b3607f0063806c29138840102a5bba05Andrew Lee case android.telephony.DisconnectCause.CDMA_ALREADY_ACTIVATED: 11692c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_CALL_LOST: 11792c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_DROP: 11892c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_INTERCEPT: 11992c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_LOCKED_UNTIL_POWER_CYCLE: 12092c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_PREEMPTED: 12192c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_REORDER: 12292c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_RETRY_ORDER: 12392c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.CDMA_SO_REJECT: 124aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CONGESTION: 12592c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.ICC_ERROR: 12692c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.INVALID_CREDENTIALS: 127aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.INVALID_NUMBER: 12892c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.LOST_SIGNAL: 12992c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.NO_PHONE_NUMBER_SUPPLIED: 130aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.NUMBER_UNREACHABLE: 13192c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.OUTGOING_FAILURE: 13292c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.OUT_OF_NETWORK: 13392c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.OUT_OF_SERVICE: 13492c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.POWER_OFF: 135cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn case android.telephony.DisconnectCause.LOW_BATTERY: 136cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn case android.telephony.DisconnectCause.DIAL_LOW_BATTERY: 137aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.SERVER_ERROR: 13892c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.SERVER_UNREACHABLE: 139aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.TIMED_OUT: 140aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.UNOBTAINABLE_NUMBER: 141aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.VOICEMAIL_NUMBER_MISSING: 14225f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_USSD: 14325f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_SS: 14425f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_DIAL: 14507fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_DIAL_VIDEO: 14607fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_VIDEO_MODIFIED_TO_SS: 14707fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_VIDEO_MODIFIED_TO_USSD: 14807fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_VIDEO_MODIFIED_TO_DIAL: 14907fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO: 15092c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.ERROR_UNSPECIFIED: 151a449435441faf39559fce7719fee75c320c103feTyler Gunn case android.telephony.DisconnectCause.MAXIMUM_NUMBER_OF_CALLS_REACHED: 15292a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn case android.telephony.DisconnectCause.DATA_DISABLED: 15392a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn case android.telephony.DisconnectCause.DATA_LIMIT_REACHED: 15402dfc68b6b5714ddab5f4d7bbfc984798fd67c04Brad Ebinger case android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING: 1550ded16620513aff3e7e1c6f75c2b534514658fe0Johan Redestig case android.telephony.DisconnectCause.IMEI_NOT_ACCEPTED: 1560380b3c26461a07b9b185efd9fa7b3d17f78efe2Tyler Gunn case android.telephony.DisconnectCause.WIFI_LOST: 1572880ad7c1f17ff21e4517d857c1928fce1b5be28Brad Ebinger case android.telephony.DisconnectCause.IMS_ACCESS_BLOCKED: 1585ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn case android.telephony.DisconnectCause.IMS_SIP_ALTERNATE_EMERGENCY_CALL: 159aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.ERROR; 160aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 16192c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.DIALED_MMI: 162aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.EXITED_ECM: 16392c9a12485bddda1195f0a5b92f7e3cdcf690de9Andrew Lee case android.telephony.DisconnectCause.MMI: 1646a2bfed2a70c68e8aea054f7eb31d102d0ec898fAndrew Lee case android.telephony.DisconnectCause.IMS_MERGED_SUCCESSFULLY: 165aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.OTHER; 166aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 167aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.NOT_VALID: 168aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.NOT_DISCONNECTED: 169aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return DisconnectCause.UNKNOWN; 170aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 171269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn case android.telephony.DisconnectCause.CALL_PULLED: 172269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn return DisconnectCause.CALL_PULLED; 173269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn 174372d9b02d94cdf5e04420c1e7c5955edaf5fbb35Tyler Gunn case android.telephony.DisconnectCause.ANSWERED_ELSEWHERE: 175372d9b02d94cdf5e04420c1e7c5955edaf5fbb35Tyler Gunn return DisconnectCause.ANSWERED_ELSEWHERE; 176372d9b02d94cdf5e04420c1e7c5955edaf5fbb35Tyler Gunn 177aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee default: 178483feb58d223acc3ab589214bd4714c52c971491Etan Cohen Log.w("DisconnectCauseUtil.toTelecomDisconnectCauseCode", 179483feb58d223acc3ab589214bd4714c52c971491Etan Cohen "Unrecognized Telephony DisconnectCause " 180483feb58d223acc3ab589214bd4714c52c971491Etan Cohen + telephonyDisconnectCause); 181483feb58d223acc3ab589214bd4714c52c971491Etan Cohen return DisconnectCause.UNKNOWN; 182aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 183aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 184aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 185aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee /** 186aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * Returns a label for to the disconnect cause to be shown to the user. 187aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee */ 188aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee private static CharSequence toTelecomDisconnectCauseLabel( 1891d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong Context context, int telephonyDisconnectCause, int telephonyPerciseDisconnectCause) { 1901d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong CharSequence label; 1911d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong if (telephonyPerciseDisconnectCause != CallFailCause.NOT_VALID) { 1921d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong label = getLabelFromPreciseDisconnectCause(context, telephonyPerciseDisconnectCause, 1931d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong telephonyDisconnectCause); 1941d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong } else { 1951d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong label = getLabelFromDisconnectCause(context, telephonyDisconnectCause); 1961d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong } 1971d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong return label; 1981d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong } 1991d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong 2001d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong /** 2011d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * Returns a label for to the generic disconnect cause to be shown to the user. 2021d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong */ 2031d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong private static CharSequence getLabelFromDisconnectCause( 204aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee Context context, int telephonyDisconnectCause) { 2051d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong if (context == null) { 206aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ""; 207aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 208aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 209aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee Integer resourceId = null; 210aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee switch (telephonyDisconnectCause) { 211aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.BUSY: 212aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_userBusy; 213aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 214aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 215aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CONGESTION: 216aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_congestion; 217aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 218aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 219aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.TIMED_OUT: 220aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_timedOut; 221aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 222aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 223aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.SERVER_UNREACHABLE: 224aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_server_unreachable; 225aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 226aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 227aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.NUMBER_UNREACHABLE: 228aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_number_unreachable; 229aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 230aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 231aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.INVALID_CREDENTIALS: 232aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_invalid_credentials; 233aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 234aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 235aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.SERVER_ERROR: 236aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_server_error; 237aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 238aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 239aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.OUT_OF_NETWORK: 240aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_out_of_network; 241aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 242aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 243aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.LOST_SIGNAL: 244aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CDMA_DROP: 245aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_noSignal; 246aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 247aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 248aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.LIMIT_EXCEEDED: 249aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_limitExceeded; 250aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 251aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 252aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.POWER_OFF: 253aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_powerOff; 254aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 255aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 256cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn case android.telephony.DisconnectCause.LOW_BATTERY: 257cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn resourceId = R.string.callFailed_low_battery; 258cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn break; 259cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn 260cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn case android.telephony.DisconnectCause.DIAL_LOW_BATTERY: 261cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn resourceId = R.string.dialFailed_low_battery; 262cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn break; 263cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn 264aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.ICC_ERROR: 265aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_simError; 266aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 267aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 268aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.OUT_OF_SERVICE: 269aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_outOfService; 270aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 271aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 272aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.INVALID_NUMBER: 273aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.UNOBTAINABLE_NUMBER: 274aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_unobtainable_number; 275aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 276aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 277269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn case android.telephony.DisconnectCause.CALL_PULLED: 278269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn resourceId = R.string.callEnded_pulled; 279f719bedc51f8b7337460cace1c776b0aaa31b055Tyler Gunn break; 280269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn 281a449435441faf39559fce7719fee75c320c103feTyler Gunn case android.telephony.DisconnectCause.MAXIMUM_NUMBER_OF_CALLS_REACHED: 282a449435441faf39559fce7719fee75c320c103feTyler Gunn resourceId = R.string.callFailed_maximum_reached; 283f719bedc51f8b7337460cace1c776b0aaa31b055Tyler Gunn break; 284a449435441faf39559fce7719fee75c320c103feTyler Gunn 28592a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn case android.telephony.DisconnectCause.DATA_DISABLED: 28692a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn resourceId = R.string.callFailed_data_disabled; 28792a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn break; 28892a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn 28992a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn case android.telephony.DisconnectCause.DATA_LIMIT_REACHED: 29092a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn resourceId = R.string.callFailed_data_limit_reached; 29192a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn break; 29292a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn 2935ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn case android.telephony.DisconnectCause.IMS_SIP_ALTERNATE_EMERGENCY_CALL: 2945ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn resourceId = R.string.incall_error_power_off; 2955ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn break; 2965ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn 297aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee default: 298aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 299aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 300aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return resourceId == null ? "" : context.getResources().getString(resourceId); 301aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 302aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 303aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee /** 3041d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong * Returns a label for to the precise disconnect cause to be shown to the user. 3051d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong */ 3061d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong private static CharSequence getLabelFromPreciseDisconnectCause( 3071d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong Context context, int telephonyPreciseDisconnectCause, int telephonyDisconnectCause) { 3081d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong if (context == null) { 3091d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong return ""; 3101d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong } 3111d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong 3121d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong Integer resourceId = null; 3131d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong switch (telephonyPreciseDisconnectCause) { 3141d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.UNOBTAINABLE_NUMBER: 3151d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_unassigned_number_txt; 3161d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3171d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.NO_ROUTE_TO_DEST: 3181d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_no_route_to_destination_txt; 3191d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3201d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.CHANNEL_UNACCEPTABLE: 3211d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_channel_unacceptable_txt; 3221d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3231d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.OPERATOR_DETERMINED_BARRING: 3241d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_operator_determined_barring_txt; 3251d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3261d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.NORMAL_CLEARING: 3271d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_normal_call_clearing_txt; 3281d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3291d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.USER_BUSY: 3301d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_user_busy_txt; 3311d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3321d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.NO_USER_RESPONDING: 3331d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_no_user_responding_txt; 3341d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3351d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.USER_ALERTING_NO_ANSWER: 3361d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_user_alerting_txt; 3371d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3381d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.CALL_REJECTED: 3391d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_call_rejected_txt; 3401d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3411d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.NUMBER_CHANGED: 3421d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_number_changed_txt; 3431d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3441d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.PRE_EMPTION: 3451d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_pre_emption_txt; 3461d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3471d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.NON_SELECTED_USER_CLEARING: 3481d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_non_selected_user_clearing_txt; 3491d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3501d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.DESTINATION_OUT_OF_ORDER: 3511d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_destination_out_of_order_txt; 3521d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3531d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.INVALID_NUMBER_FORMAT: 3541d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_invalid_number_format_txt; 3551d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3561d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.FACILITY_REJECTED: 3571d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_facility_rejected_txt; 3581d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3591d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.STATUS_ENQUIRY: 3601d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_response_to_STATUS_ENQUIRY_txt; 3611d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3621d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.NORMAL_UNSPECIFIED: 3631d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_normal_unspecified_txt; 3641d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3651d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.NO_CIRCUIT_AVAIL: 3661d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_no_circuit_available_txt; 3671d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3681d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.NETWORK_OUT_OF_ORDER: 3691d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_network_out_of_order_txt; 3701d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3711d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.TEMPORARY_FAILURE: 3721d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_temporary_failure_txt; 3731d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3741d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.SWITCHING_CONGESTION: 3751d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_switching_equipment_congestion_txt; 3761d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3771d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.ACCESS_INFORMATION_DISCARDED: 3781d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_access_information_discarded_txt; 3791d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3801d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.CHANNEL_NOT_AVAIL: 3811d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_requested_circuit_txt; 3821d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3831d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.RESOURCES_UNAVAILABLE_UNSPECIFIED: 3841d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_resources_unavailable_unspecified_txt; 3851d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3861d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.QOS_NOT_AVAIL: 3871d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_quality_of_service_unavailable_txt; 3881d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3891d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.REQUESTED_FACILITY_NOT_SUBSCRIBED: 3901d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_requested_facility_not_subscribed_txt; 3911d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3921d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.INCOMING_CALL_BARRED_WITHIN_CUG: 3931d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_incoming_calls_barred_within_the_CUG_txt; 3941d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3951d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.BEARER_CAPABILITY_NOT_AUTHORISED: 3961d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_bearer_capability_not_authorized_txt; 3971d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 3981d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.BEARER_NOT_AVAIL: 3991d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_bearer_capability_not_presently_available_txt; 4001d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4011d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.SERVICE_OR_OPTION_NOT_AVAILABLE: 4021d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = 4031d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong R.string.clh_callFailed_service_or_option_not_available_unspecified_txt; 4041d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4051d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.BEARER_SERVICE_NOT_IMPLEMENTED: 4061d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_bearer_service_not_implemented_txt; 4071d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4081d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.ACM_LIMIT_EXCEEDED: 4091d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_ACM_equal_to_or_greater_than_ACMmax_txt; 4101d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4111d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.REQUESTED_FACILITY_NOT_IMPLEMENTED: 4121d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_requested_facility_not_implemented_txt; 4131d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4141d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.ONLY_RESTRICTED_DIGITAL_INFO_BC_AVAILABLE: 4151d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string 4161d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong .clh_callFailed_only_restricted_digital_information_bearer_capability_is_available_txt; 4171d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4181d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.SERVICE_OR_OPTION_NOT_IMPLEMENTED: 4191d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = 4201d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong R.string.clh_callFailed_service_or_option_not_implemented_unspecified_txt; 4211d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4221d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.INVALID_TRANSACTION_ID_VALUE: 4231d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_invalid_transaction_identifier_value_txt; 4241d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4251d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.USER_NOT_MEMBER_OF_CUG: 4261d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_user_not_member_of_CUG_txt; 4271d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4281d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.INCOMPATIBLE_DESTINATION: 4291d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_incompatible_destination_txt; 4301d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4311d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.INVALID_TRANSIT_NETWORK_SELECTION: 4321d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_invalid_transit_network_selection_txt; 4331d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4341d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.SEMANTICALLY_INCORRECT_MESSAGE: 4351d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_semantically_incorrect_message_txt; 4361d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4371d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.INVALID_MANDATORY_INFORMATION: 4381d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_invalid_mandatory_information_txt; 4391d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4401d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.MESSAGE_TYPE_NON_EXISTENT: 4411d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = 4421d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong R.string.clh_callFailed_message_type_non_existent_or_not_implemented_txt; 4431d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4441d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROT_STATE: 4451d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string 4461d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong .clh_callFailed_message_type_not_compatible_with_protocol_state_txt; 4471d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4481d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.IE_NON_EXISTENT_OR_NOT_IMPLEMENTED: 4491d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string 4501d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong .clh_callFailed_information_element_non_existent_or_not_implemented_txt; 4511d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4521d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.CONDITIONAL_IE_ERROR: 4531d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_conditional_IE_error_txt; 4541d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4551d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE: 4561d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_message_not_compatible_with_protocol_state_txt; 4571d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4581d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.RECOVERY_ON_TIMER_EXPIRY: 4591d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_recovery_on_timer_expiry_txt; 4601d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4611d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.PROTOCOL_ERROR_UNSPECIFIED: 4621d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_protocol_Error_unspecified_txt; 4631d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4641d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case CallFailCause.INTERWORKING_UNSPECIFIED: 4651d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_interworking_unspecified_txt; 4661d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4671d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong default: 4681d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong switch (telephonyDisconnectCause) { 4691d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case android.telephony.DisconnectCause.POWER_OFF: 4701d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_powerOff_txt; 4711d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4721d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case android.telephony.DisconnectCause.ICC_ERROR: 4731d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_callFailed_simError_txt; 4741d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4751d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong case android.telephony.DisconnectCause.OUT_OF_SERVICE: 4761d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_incall_error_out_of_service_txt; 4771d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4781d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong default: 4791d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong resourceId = R.string.clh_card_title_call_ended_txt; 4801d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4811d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong } 4821d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong break; 4831d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong } 4841d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong return context.getResources().getString(resourceId); 4851d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong } 4861d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong 4871d9d338e36d33eb39f1be46e48075e92a94abe7fWenting Xiong /** 488aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * Returns a description of the disconnect cause to be shown to the user. 489aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee */ 490aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee private static CharSequence toTelecomDisconnectCauseDescription( 491aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee Context context, int telephonyDisconnectCause) { 492aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee if (context == null ) { 493aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ""; 494aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 495aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 496aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee Integer resourceId = null; 497aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee switch (telephonyDisconnectCause) { 498aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CALL_BARRED: 499aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_cb_enabled; 500aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 501aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 5028fb4b652b3607f0063806c29138840102a5bba05Andrew Lee case android.telephony.DisconnectCause.CDMA_ALREADY_ACTIVATED: 5038fb4b652b3607f0063806c29138840102a5bba05Andrew Lee resourceId = R.string.callFailed_cdma_activation; 5048fb4b652b3607f0063806c29138840102a5bba05Andrew Lee break; 5058fb4b652b3607f0063806c29138840102a5bba05Andrew Lee 506aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.FDN_BLOCKED: 507aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_fdn_only; 508aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 509aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 510aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CS_RESTRICTED: 511aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_dsac_restricted; 512aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 513aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 514aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CS_RESTRICTED_EMERGENCY: 515aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_dsac_restricted_emergency; 516aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 517aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 518aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CS_RESTRICTED_NORMAL: 519aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.callFailed_dsac_restricted_normal; 520aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 521aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 52225f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_USSD: 52325f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla resourceId = R.string.callFailed_dialToUssd; 52425f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla break; 52525f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla 52625f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_SS: 52725f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla resourceId = R.string.callFailed_dialToSs; 52825f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla break; 52925f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla 53025f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_DIAL: 53125f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla resourceId = R.string.callFailed_dialToDial; 53225f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla break; 53325f8056617836d5b0e1b2b7128691244e0331b02Rakesh Pallerla 53407fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_MODIFIED_TO_DIAL_VIDEO: 53507fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti resourceId = R.string.callFailed_dialToDialVideo; 53607fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti break; 53707fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti 53807fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_VIDEO_MODIFIED_TO_SS: 53907fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti resourceId = R.string.callFailed_dialVideoToSs; 54007fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti break; 54107fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti 54207fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_VIDEO_MODIFIED_TO_USSD: 54307fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti resourceId = R.string.callFailed_dialVideoToUssd; 54407fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti break; 54507fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti 54607fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_VIDEO_MODIFIED_TO_DIAL: 54707fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti resourceId = R.string.callFailed_dialVideoToDial; 54807fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti break; 54907fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti 55007fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti case android.telephony.DisconnectCause.DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO: 55107fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti resourceId = R.string.callFailed_dialVideoToDialVideo; 55207fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti break; 55307fb05c7e661e77f3477426128057a2b32bc6f71Suresh Koleti 554aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.OUTGOING_FAILURE: 555aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // We couldn't successfully place the call; there was some 556aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // failure in the telephony layer. 557aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // TODO: Need UI spec for this failure case; for now just 558aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // show a generic error. 559aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.incall_error_call_failed; 560aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 561aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 562aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.POWER_OFF: 563a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee // Radio is explictly powered off because the device is in airplane mode. 564a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee 565a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee // TODO: Offer the option to turn the radio on, and automatically retry the call 566a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee // once network registration is complete. 567a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee 5680bb4d30ea2c50bf53acefc4514452c4945f297b6Tyler Gunn if (ImsUtil.shouldPromoteWfc(context)) { 5690bb4d30ea2c50bf53acefc4514452c4945f297b6Tyler Gunn resourceId = R.string.incall_error_promote_wfc; 5700bb4d30ea2c50bf53acefc4514452c4945f297b6Tyler Gunn } else if (ImsUtil.isWfcModeWifiOnly(context)) { 571a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee resourceId = R.string.incall_error_wfc_only_no_wireless_network; 572a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee } else if (ImsUtil.isWfcEnabled(context)) { 573a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee resourceId = R.string.incall_error_power_off_wfc; 574a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee } else { 575a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee resourceId = R.string.incall_error_power_off; 576a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee } 577aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 578aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 579cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn case android.telephony.DisconnectCause.LOW_BATTERY: 580cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn resourceId = R.string.callFailed_low_battery; 581cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn break; 582cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn 583cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn case android.telephony.DisconnectCause.DIAL_LOW_BATTERY: 584cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn resourceId = R.string.dialFailed_low_battery; 585cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn break; 586cf5c6eaa42f41fd60ce86a8c02c79b9ec1efa71aTyler Gunn 58792462cfafde010ce492420ab9c1e91e73d9cc57aTyler Gunn case android.telephony.DisconnectCause.CDMA_NOT_EMERGENCY: 58892462cfafde010ce492420ab9c1e91e73d9cc57aTyler Gunn // Only emergency calls are allowed when in emergency callback mode. 58992462cfafde010ce492420ab9c1e91e73d9cc57aTyler Gunn resourceId = R.string.incall_error_ecm_emergency_only; 59092462cfafde010ce492420ab9c1e91e73d9cc57aTyler Gunn break; 59192462cfafde010ce492420ab9c1e91e73d9cc57aTyler Gunn 592aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.EMERGENCY_ONLY: 593aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // Only emergency numbers are allowed, but we tried to dial 594aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // a non-emergency number. 595aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.incall_error_emergency_only; 596aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 597aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 598aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.OUT_OF_SERVICE: 599aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // No network connection. 6000bb4d30ea2c50bf53acefc4514452c4945f297b6Tyler Gunn if (ImsUtil.shouldPromoteWfc(context)) { 6010bb4d30ea2c50bf53acefc4514452c4945f297b6Tyler Gunn resourceId = R.string.incall_error_promote_wfc; 6020bb4d30ea2c50bf53acefc4514452c4945f297b6Tyler Gunn } else if (ImsUtil.isWfcModeWifiOnly(context)) { 603a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee resourceId = R.string.incall_error_wfc_only_no_wireless_network; 604a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee } else if (ImsUtil.isWfcEnabled(context)) { 605a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee resourceId = R.string.incall_error_out_of_service_wfc; 606a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee } else { 607a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee resourceId = R.string.incall_error_out_of_service; 608a6bc312966b7d1c6b46e99f4c1be9b20188684abAndrew Lee } 609aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 610aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 611aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.NO_PHONE_NUMBER_SUPPLIED: 612aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // The supplied Intent didn't contain a valid phone number. 613aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // (This is rare and should only ever happen with broken 614aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // 3rd-party apps.) For now just show a generic error. 615aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.incall_error_no_phone_number_supplied; 616aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 617aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 618aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.VOICEMAIL_NUMBER_MISSING: 619aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // TODO: Need to bring up the "Missing Voicemail Number" dialog, which 620aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // will ultimately take us to the Call Settings. 621aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee resourceId = R.string.incall_error_missing_voicemail_number; 622aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 623aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 6242d6dc18f9cb17c4f35fdb594eb90003764bb9336Tyler Gunn case android.telephony.DisconnectCause.VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED: 6252d6dc18f9cb17c4f35fdb594eb90003764bb9336Tyler Gunn resourceId = R.string.callFailed_video_call_tty_enabled; 6262d6dc18f9cb17c4f35fdb594eb90003764bb9336Tyler Gunn break; 6272d6dc18f9cb17c4f35fdb594eb90003764bb9336Tyler Gunn 628269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn case android.telephony.DisconnectCause.CALL_PULLED: 629269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn resourceId = R.string.callEnded_pulled; 630269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn break; 631269142e46e65114db3a97f4960e0386ee5ce1a9cTyler Gunn 632a449435441faf39559fce7719fee75c320c103feTyler Gunn case android.telephony.DisconnectCause.MAXIMUM_NUMBER_OF_CALLS_REACHED: 633a449435441faf39559fce7719fee75c320c103feTyler Gunn resourceId = R.string.callFailed_maximum_reached; 634a449435441faf39559fce7719fee75c320c103feTyler Gunn 635aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.OUTGOING_CANCELED: 636aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // We don't want to show any dialog for the canceled case since the call was 637aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // either canceled by the user explicitly (end-call button pushed immediately) 638aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // or some other app canceled the call and immediately issued a new CALL to 639aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee // replace it. 64092a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn break; 64192a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn 64292a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn case android.telephony.DisconnectCause.DATA_DISABLED: 64392a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn resourceId = R.string.callFailed_data_disabled; 64492a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn break; 64592a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn 64692a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn case android.telephony.DisconnectCause.DATA_LIMIT_REACHED: 647656439f81b154d9133c5ba5e4524c5f44124b96dTyler Gunn resourceId = R.string.callFailed_data_limit_reached_description; 64892a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn break; 64902dfc68b6b5714ddab5f4d7bbfc984798fd67c04Brad Ebinger case android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING: 65002dfc68b6b5714ddab5f4d7bbfc984798fd67c04Brad Ebinger resourceId = com.android.internal.R.string.mmiErrorWhileRoaming; 65102dfc68b6b5714ddab5f4d7bbfc984798fd67c04Brad Ebinger break; 65292a5905f53c2498b63220ba5d00b8804b46f054dTyler Gunn 6530ded16620513aff3e7e1c6f75c2b534514658fe0Johan Redestig case android.telephony.DisconnectCause.IMEI_NOT_ACCEPTED: 6540ded16620513aff3e7e1c6f75c2b534514658fe0Johan Redestig resourceId = R.string.callFailed_imei_not_accepted; 6550ded16620513aff3e7e1c6f75c2b534514658fe0Johan Redestig break; 6560ded16620513aff3e7e1c6f75c2b534514658fe0Johan Redestig 6570380b3c26461a07b9b185efd9fa7b3d17f78efe2Tyler Gunn case android.telephony.DisconnectCause.WIFI_LOST: 6580380b3c26461a07b9b185efd9fa7b3d17f78efe2Tyler Gunn resourceId = R.string.callFailed_wifi_lost; 6590380b3c26461a07b9b185efd9fa7b3d17f78efe2Tyler Gunn break; 6600380b3c26461a07b9b185efd9fa7b3d17f78efe2Tyler Gunn 6615ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn case android.telephony.DisconnectCause.IMS_SIP_ALTERNATE_EMERGENCY_CALL: 6625ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn resourceId = R.string.incall_error_power_off; 6635ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn break; 6645ee70fe0c3b1cb997b0f5e134982f4565ac7772aTyler Gunn 665aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee default: 666aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee break; 667aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 668aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return resourceId == null ? "" : context.getResources().getString(resourceId); 669aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 670aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 67123913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn /** 67223913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * Maps the telephony {@link android.telephony.DisconnectCause} into a reason string which is 67323913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * returned in the Telecom {@link DisconnectCause#getReason()}. 67423913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * 67523913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * @param context The current context. 67623913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * @param telephonyDisconnectCause The {@link android.telephony.DisconnectCause} code. 67723913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * @param reason A reason provided by the caller; only used if a more specific reason cannot 67823913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * be determined here. 67923913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn * @return The disconnect reason. 68023913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn */ 68123913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn private static String toTelecomDisconnectReason(Context context, int telephonyDisconnectCause, 68223913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn String reason) { 68323913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn 68423913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn if (context == null) { 68523913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn return ""; 68623913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn } 68723913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn 68823913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn switch (telephonyDisconnectCause) { 68923913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn case android.telephony.DisconnectCause.POWER_OFF: 69023913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn // Airplane mode (radio off) 69123913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn // intentional fall-through 69223913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn case android.telephony.DisconnectCause.OUT_OF_SERVICE: 69323913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn // No network connection. 69423913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn if (ImsUtil.shouldPromoteWfc(context)) { 69523913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn return android.telecom.DisconnectCause.REASON_WIFI_ON_BUT_WFC_OFF; 69623913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn } 69723913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn break; 698549f236f824c50f9164760adb567305bb55ffaf4Brad Ebinger case android.telephony.DisconnectCause.IMS_ACCESS_BLOCKED: 699549f236f824c50f9164760adb567305bb55ffaf4Brad Ebinger return DisconnectCause.REASON_IMS_ACCESS_BLOCKED; 70023913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn } 70123913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn 70223913d126cd473ceb21d2b94f0702ce53b2de8dcTyler Gunn // If no specific code-mapping found, then fall back to using the reason. 703c3840b2f0ff26cae980256caf48c103a64a3b89eSailesh Nepal String causeAsString = android.telephony.DisconnectCause.toString(telephonyDisconnectCause); 704c3840b2f0ff26cae980256caf48c103a64a3b89eSailesh Nepal if (reason == null) { 705c3840b2f0ff26cae980256caf48c103a64a3b89eSailesh Nepal return causeAsString; 706c3840b2f0ff26cae980256caf48c103a64a3b89eSailesh Nepal } else { 707c3840b2f0ff26cae980256caf48c103a64a3b89eSailesh Nepal return reason + ", " + causeAsString; 708c3840b2f0ff26cae980256caf48c103a64a3b89eSailesh Nepal } 709c3840b2f0ff26cae980256caf48c103a64a3b89eSailesh Nepal } 710c3840b2f0ff26cae980256caf48c103a64a3b89eSailesh Nepal 711aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee /** 712aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee * Returns the tone to play for the disconnect cause, or UNKNOWN if none should be played. 713aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee */ 714aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee private static int toTelecomDisconnectCauseTone(int telephonyDisconnectCause) { 715aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee switch (telephonyDisconnectCause) { 716aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.BUSY: 717aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ToneGenerator.TONE_SUP_BUSY; 718aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 719aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CONGESTION: 720aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ToneGenerator.TONE_SUP_CONGESTION; 721aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 722aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CDMA_REORDER: 723aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ToneGenerator.TONE_CDMA_REORDER; 724aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 725aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CDMA_INTERCEPT: 726aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ToneGenerator.TONE_CDMA_ABBR_INTERCEPT; 727aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 728aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.CDMA_DROP: 729aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.OUT_OF_SERVICE: 730aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ToneGenerator.TONE_CDMA_CALLDROP_LITE; 731aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 732aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.UNOBTAINABLE_NUMBER: 733aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ToneGenerator.TONE_SUP_ERROR; 734aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 735aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.ERROR_UNSPECIFIED: 736aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.LOCAL: 737aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee case android.telephony.DisconnectCause.NORMAL: 738189e5d0724579e2ca510f7d5a9d105c4e62369bfzoey chen case android.telephony.DisconnectCause.NORMAL_UNSPECIFIED: 7392d6dc18f9cb17c4f35fdb594eb90003764bb9336Tyler Gunn case android.telephony.DisconnectCause.VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED: 740aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ToneGenerator.TONE_PROP_PROMPT; 741aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee 7426a2bfed2a70c68e8aea054f7eb31d102d0ec898fAndrew Lee case android.telephony.DisconnectCause.IMS_MERGED_SUCCESSFULLY: 7436a2bfed2a70c68e8aea054f7eb31d102d0ec898fAndrew Lee // Do not play any tones if disconnected because of a successful merge. 744aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee default: 745aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee return ToneGenerator.TONE_UNKNOWN; 746aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 747aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee } 748aef7a4bc4f85149de427d7506ebe97753b2ca6c2Andrew Lee} 749