diff -r 40a3f856b14d -r 41a7f70b3818 phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp --- a/phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp Thu Aug 19 09:54:27 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp Tue Aug 31 15:14:29 2010 +0300 @@ -34,6 +34,12 @@ #include "tphonecmdparamglobalnote.h" #include "tphonecmdparamnote.h" #include "cphonemainresourceresolver.h" +#include "cphonecenrepproxy.h" + +// CONSTANTS +const TUid KCRUidTelConfiguration = {0x102828B8}; + +const TUint32 KTelShowCauseCode = 0x00000002; // ================= MEMBER FUNCTIONS ======================= @@ -45,9 +51,17 @@ MPhoneViewCommandHandle* aViewCommandHandle, MPhoneStateMachine* aStateMachine ) : iViewCommandHandle( aViewCommandHandle), - iStateMachine (aStateMachine ) + iStateMachine( aStateMachine ), + iCauseCodeVariation( EFalse ) { - } + if ( KErrNone != CPhoneCenRepProxy::Instance()->GetInt( + KCRUidTelConfiguration, + KTelShowCauseCode, + iCauseCodeVariation ) ) + { + iCauseCodeVariation = EFalse; + } + } // ----------------------------------------------------------- // CPhoneErrorMessagesHandler::~CPhoneErrorMessagesHandler() @@ -93,7 +107,8 @@ // CPhoneErrorMessagesHandler::SendGlobalInfoNoteL // --------------------------------------------------------- // -EXPORT_C void CPhoneErrorMessagesHandler::SendGlobalInfoNoteL( TInt aResourceId ) +EXPORT_C void CPhoneErrorMessagesHandler::SendGlobalInfoNoteL( + TInt aResourceId, TBool aNotificationDialog ) { __LOGMETHODSTARTEND( EPhoneControl, "CPhoneErrorMessagesHandler::SendGlobalInfoNoteL()" ); @@ -105,16 +120,34 @@ // Re-enable global notes TPhoneCmdParamBoolean globalNotifierParam; globalNotifierParam.SetBoolean( EFalse ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled, &globalNotifierParam ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetGlobalNotifiersDisabled, + &globalNotifierParam ); TPhoneCmdParamGlobalNote globalNoteParam; - - globalNoteParam.SetType( EAknGlobalInformationNote ); - globalNoteParam.SetTextResourceId( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( aResourceId ) ); - globalNoteParam.SetTone( EAvkonSIDInformationTone ); + PhoneNotificationType type = aNotificationDialog ? + EPhoneNotificationDialog : EPhoneMessageBoxInformation; + globalNoteParam.SetType( type ); + globalNoteParam.SetNotificationDialog( aNotificationDialog ); + TInt resourceID( KErrNotFound ); + TInt causeCode( KErrNotFound ); + TBool notification( ETrue ); + if ( iCauseCodeVariation && GetCauseCode( causeCode, resourceID, notification ) ) + { + globalNoteParam.SetNotificationDialog( notification ); + globalNoteParam.SetCauseCode(causeCode); + globalNoteParam.SetTextResourceId( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( resourceID ) ); + } + else + { + globalNoteParam.SetTextResourceId( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( aResourceId ) ); + } + iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); } @@ -125,7 +158,8 @@ // CPhoneErrorMessagesHandler::SendGlobalErrorNoteL // --------------------------------------------------------- // -EXPORT_C void CPhoneErrorMessagesHandler::SendGlobalErrorNoteL( TInt aResourceId ) +EXPORT_C void CPhoneErrorMessagesHandler::SendGlobalErrorNoteL( + TInt aResourceId, TBool aNotificationDialog ) { __LOGMETHODSTARTEND( EPhoneControl, "CPhoneErrorMessagesHandler::SendGlobalErrorNoteL()" ); @@ -142,12 +176,29 @@ &globalNotifierParam ); TPhoneCmdParamGlobalNote globalNoteParam; - globalNoteParam.SetType( EAknGlobalErrorNote ); - globalNoteParam.SetTextResourceId( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( aResourceId ) ); - globalNoteParam.SetTone( CAknNoteDialog::EErrorTone ); - + PhoneNotificationType type = aNotificationDialog ? + EPhoneNotificationDialog : EPhoneMessageBoxInformation; + globalNoteParam.SetType( type ); + globalNoteParam.SetNotificationDialog( aNotificationDialog ); + + TInt resourceID( KErrNotFound ); + TInt causeCode( KErrNotFound ); + TBool notification( ETrue ); + if ( iCauseCodeVariation && GetCauseCode( causeCode, resourceID, notification ) ) + { + globalNoteParam.SetNotificationDialog( notification ); + globalNoteParam.SetCauseCode(causeCode); + globalNoteParam.SetTextResourceId( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( resourceID ) ); + } + else + { + globalNoteParam.SetTextResourceId( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( aResourceId ) ); + } + iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); } @@ -158,7 +209,8 @@ // CPhoneErrorMessagesHandler::SendGlobalWarningNoteL // --------------------------------------------------------- // -EXPORT_C void CPhoneErrorMessagesHandler::SendGlobalWarningNoteL( TInt aResourceId ) +EXPORT_C void CPhoneErrorMessagesHandler::SendGlobalWarningNoteL( + TInt aResourceId, TBool aNotificationDialog ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneErrorMessagesHandler::SendGlobalWarningNoteL( ) "); __ASSERT_DEBUG( aResourceId, Panic( EPhoneCtrlParameterNotInitialized ) ); @@ -175,12 +227,29 @@ &globalNotifierParam ); TPhoneCmdParamGlobalNote globalNoteParam; - globalNoteParam.SetType( EAknGlobalWarningNote ); - globalNoteParam.SetTextResourceId( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( aResourceId ) ); - globalNoteParam.SetTone( EAvkonSIDWarningTone ); + PhoneNotificationType type = aNotificationDialog ? + EPhoneNotificationDialog : EPhoneMessageBoxInformation; + globalNoteParam.SetType( type ); + globalNoteParam.SetNotificationDialog( aNotificationDialog ); + TInt resourceID( KErrNotFound ); + TInt causeCode( KErrNotFound ); + TBool notification( ETrue ); + if ( iCauseCodeVariation && GetCauseCode( causeCode, resourceID, notification) ) + { + globalNoteParam.SetNotificationDialog( notification ); + globalNoteParam.SetCauseCode(causeCode); + globalNoteParam.SetTextResourceId( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( resourceID ) ); + } + else + { + globalNoteParam.SetTextResourceId( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( aResourceId ) ); + } + iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); } @@ -209,26 +278,27 @@ __PHONELOG1( EBasic, EPhoneControl, "PhoneUIControl: CPhoneErrorMessagesHandler::ShowErrorSpecificNoteL - aErrorInfo.iErrorCode =%d ", aErrorInfo.iErrorCode); - + iCallId = aErrorInfo.iCallId; + switch( aErrorInfo.iErrorCode ) { case ECCPErrorRejected: case ECCPRequestFailure: - SendGlobalErrorNoteL( EPhoneNoteTextRequestRejected ); + SendGlobalErrorNoteL( EPhoneNoteTextRequestRejected, ETrue ); break; case ECCPErrorInvalidPhoneNumber: - SendGlobalErrorNoteL( EPhoneInvalidPhoneNumber ); + SendGlobalErrorNoteL( EPhoneInvalidPhoneNumber, ETrue ); break; case ECCPErrorInvalidURI: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneInvalidPhoneNumber ); + SendGlobalInfoNoteL( EPhoneInvalidPhoneNumber, ETrue ); } else { - SendGlobalErrorNoteL( EPhoneInvalidPhoneNumber ); + SendGlobalErrorNoteL( EPhoneInvalidPhoneNumber, ETrue ); } break; @@ -239,13 +309,13 @@ } else { - SendGlobalInfoNoteL( EPhoneNoteTextCheckNetworkservices ); + SendGlobalInfoNoteL( EPhoneNoteTextCheckNetworkservices, ETrue ); } break; case ECCPErrorNotAllowedInOfflineMode: case ECCPErrorAuthenticationFailed: - SendGlobalWarningNoteL( EPhoneEmergencyCallsOnly ); + SendGlobalWarningNoteL( EPhoneEmergencyCallsOnly, ETrue ); break; case ECCPErrorNotReady: @@ -254,69 +324,68 @@ case ECCPErrorNotFound: case ECCPErrorTimedOut: case ECCPErrorAccessDenied: - SendGlobalWarningNoteL( EPhoneNoteTextNotAllowed ); + SendGlobalWarningNoteL( EPhoneNoteTextNotAllowed, ETrue ); break; case ECCPErrorAlreadyInUse: - SendGlobalErrorNoteL( EPhoneNoteTextCallNotAllowed ); + SendGlobalErrorNoteL( EPhoneNoteTextCallNotAllowed, ETrue ); break; case ECCPErrorInvalidFDN: - SendGlobalWarningNoteL( EPhoneNoteTextCallNotAllowedFDN ); + SendGlobalWarningNoteL( EPhoneNoteTextCallNotAllowedFDN, ETrue ); break; case ECCPErrorNotReached: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneNumberNotInUse ); + SendGlobalInfoNoteL( EPhoneNumberNotInUse, ETrue ); } else { - SendGlobalWarningNoteL( EPhoneNumberNotInUse ); + SendGlobalWarningNoteL( EPhoneNumberNotInUse, ETrue ); } break; case ECCPErrorUnacceptableChannel: - case ECCPErrorCCDestinationOutOfOrder: - case ECCPErrorAccessInformationDiscarded: - case ECCPErrorQualityOfServiceNotAvailable: + case ECCPErrorCCDestinationOutOfOrder: case ECCPErrorInvalidCallReferenceValue: case ECCPErrorCCInvalidTransitNetworkSelection: case ECCPErrorConnectionError: case ECCPErrorCCIncompatibleMessageInCallState: - if( IsVideoCall( aErrorInfo.iCallId ) && - iStateMachine->PhoneEngineInfo()->ProfileId() != EProfileOffLineId ) + if( IsVideoCall( aErrorInfo.iCallId ) ) { SendGlobalInfoNoteL( EPhoneNoteVideoCallNotPossible ); } else { - SendGlobalWarningNoteL( EPhoneErrorInConnection ); + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); } break; - + + case ECCPErrorQualityOfServiceNotAvailable: + case ECCPErrorAccessInformationDiscarded: case ECCPErrorCCResourceNotAvailable: - SendGlobalWarningNoteL( EPhoneErrorInConnection ); + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); break; case ECCPErrorNumberBarred: - SendGlobalWarningNoteL( EPhoneNumberBarred ); + SendGlobalWarningNoteL( EPhoneNumberBarred, ETrue ); break; case ECCPErrorCCUserAlertingNoAnswer: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneNoAnswer ); + SendGlobalInfoNoteL( EPhoneNoAnswer, ETrue ); } else { - SendGlobalWarningNoteL( EPhoneNoAnswer ); + SendGlobalWarningNoteL( EPhoneNoAnswer, ETrue ); } break; case KErrPhoneEngineNoWcdmaNetwork: // Videotel special case. Refactoring PE/CSPlugin needed - case ECCPErrorVideoCallNotSupportedByNetwork: + case ECCPErrorVideoCallNotSupportedByNetwork: //// SendGlobalInfoNoteL( EPhoneInformationNoNetworkSupportForVideoCallNote ); break; @@ -331,37 +400,37 @@ break; case ECCPErrorNetworkBusy: - SendGlobalWarningNoteL( EPhoneNetworkBusy ); + SendGlobalWarningNoteL( EPhoneNetworkBusy, ETrue ); break; case ECCPErrorNoService: - SendGlobalWarningNoteL( EPhoneNoteNoService ); + SendGlobalWarningNoteL( EPhoneNoteNoService, ETrue ); break; case ECCPErrorBusy: - SendGlobalWarningNoteL( EPhoneNumberBusy ); + SendGlobalWarningNoteL( EPhoneNumberBusy, ETrue ); break; case ECCPErrorUserNotInCug: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneNumberNotInCUG ); + SendGlobalInfoNoteL( EPhoneNumberNotInCUG, ETrue ); } - else + else { - SendGlobalWarningNoteL( EPhoneNumberNotInCUG ); + SendGlobalWarningNoteL( EPhoneNumberNotInCUG, ETrue ); } break; case ECCPErrorCCNoRouteToDestination: - if( IsVideoCall( aErrorInfo.iCallId ) ) - { - SendGlobalInfoNoteL( EPhoneNotePhoneOutOf3GCoverage ); - } - else - { - SendGlobalWarningNoteL( EPhoneErrorInConnection ); - } + if( IsVideoCall( aErrorInfo.iCallId ) ) + { + SendGlobalInfoNoteL( EPhoneErrorInConnection ); + } + else + { + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); + } break; case ECCPErrorCCNormalCallClearing: @@ -374,59 +443,69 @@ case ECCPErrorCCUserNotResponding: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneNoteCallInfoCauseValue18 ); + SendGlobalInfoNoteL( EPhoneNoAnswer ); } else { - SendGlobalWarningNoteL( EPhoneNoAnswer ); + SendGlobalWarningNoteL( EPhoneNoAnswer, ETrue ); } break; case ECCPErrorCCCallRejected: - if( IsVideoCall( aErrorInfo.iCallId ) ) + if ( !iStateMachine->PhoneEngineInfo()->IsOutgoingCallBarringActivated() ) { - SendGlobalInfoNoteL( EPhoneNoteCalledNumberHasBarredIncomingCalls ); - } - else if ( IsVoiceCall( aErrorInfo.iCallId )) - { - SendGlobalWarningNoteL( EPhoneNoteCallInfoCauseValue21 ); + if( IsVideoCall( aErrorInfo.iCallId ) ) + { + SendGlobalInfoNoteL( EPhoneNoteCalledNumberHasBarredIncomingCalls ); + } + else if ( IsVoiceCall( aErrorInfo.iCallId )) + { + SendGlobalWarningNoteL( EPhoneNoteCalledNumberHasBarredIncomingCalls, ETrue ); + } } break; case ECCPErrorMovedPermanently: - SendGlobalInfoNoteL( EPhoneNoteCallInfoCauseValue22 ); + if( IsVideoCall( aErrorInfo.iCallId ) ) + { + SendGlobalInfoNoteL( EPhoneNumberNotInUse ); + } + else + { + SendGlobalWarningNoteL( EPhoneNumberNotInUse, ETrue ); + } break; case ECCPErrorNoAnswerForVideo: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneNoteCallInfoCauseValue16 ); + SendGlobalInfoNoteL( EPhoneNotePhoneOutOf3GCoverage ); } else { - SendGlobalWarningNoteL( EPhoneNoAnswer ); + SendGlobalWarningNoteL( EPhoneNoAnswer, ETrue ); } break; case ECCPErrorCCNoChannelAvailable: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneNoteCallInfoCauseValue34 ); + SendGlobalInfoNoteL( EPhoneNetworkBusy ); } else { - SendGlobalWarningNoteL( EPhoneNetworkBusy ); + SendGlobalWarningNoteL( EPhoneNetworkBusy, ETrue ); } break; case ECCPErrorNetworkOutOfOrder: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneNoteCallInfoCauseValue38 ); + SendGlobalInfoNoteL( EPhoneErrorInConnection ); } else { - SendGlobalWarningNoteL( EPhoneErrorInConnection ); + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); } break; @@ -437,12 +516,19 @@ } else { - SendGlobalWarningNoteL( EPhoneNoteTextNotAllowed ); + SendGlobalWarningNoteL( EPhoneNoteTextNotAllowed, ETrue ); } break; case ECCPErrorCCIncomingCallsBarredInCug: - SendGlobalInfoNoteL( EPhoneNoteCallInfoCauseValue55 ); + if( IsVideoCall( aErrorInfo.iCallId ) ) + { + SendGlobalInfoNoteL( EPhoneNumberBarred ); + } + else + { + SendGlobalWarningNoteL( EPhoneNumberBarred, ETrue ); + } break; case ECCPErrorCCIncompatibleDestination: @@ -451,12 +537,22 @@ { SendGlobalInfoNoteL( EPhoneNoteUnableToMakeVideoCallNotSupportedByOtherPhone ); } + else + { + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); + } break; case ECCPErrorCCBearerCapabilityNotCurrentlyAvailable: + case ECCPErrorCCInvalidMandatoryInformation: + case ECCPErrorCCUnspecifiedInterworkingError: if( IsVideoCall( aErrorInfo.iCallId ) ) { - SendGlobalInfoNoteL( EPhoneNoteCallInfoCauseValue58 ); + SendGlobalInfoNoteL( EPhoneNoteVideoCallNotPossible ); + } + else + { + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); } break; @@ -467,91 +563,102 @@ } else { - SendGlobalWarningNoteL( EPhoneErrorInConnection ); + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); } break; - case ECCPErrorCCUnspecifiedInterworkingError: - if( IsVideoCall( aErrorInfo.iCallId ) ) - { - SendGlobalInfoNoteL( EPhoneNoteCallInfoCauseValue127 ); - } - break; - - case ECCPErrorCCPreemption: - case ECCPErrorCCResponseToStatusEnquiry: - case ECCPErrorCCInvalidMandatoryInformation: - case ECCPErrorCCNonExistentMessageType: - case ECCPErrorCCIncompatibleMessageInProtocolState: - case ECCPErrorCCNonExistentInformationElement: - if( IsVideoCall( aErrorInfo.iCallId ) ) - { - SendGlobalInfoNoteL( EPhoneNoteCallInfoNotSupported ); - } - else - { - SendGlobalWarningNoteL( EPhoneErrorInConnection ); - } - break; - - case ECCPErrorCCRecoveryOnTimerExpiry: - if( IsVideoCall( aErrorInfo.iCallId ) ) - { - SendGlobalInfoNoteL( EPhoneNoteCallInfoNotSupported ); - } - break; - - case ECCPErrorCCFacilityRejected: + case ECCPErrorCCPreemption: if( IsVideoCall( aErrorInfo.iCallId ) ) { SendGlobalInfoNoteL( EPhoneNoteCallInfoNotSupported ); } else { - SendGlobalErrorNoteL( EPhoneNoteTextRequestRejected ); + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); + } + break; + case ECCPErrorCCResponseToStatusEnquiry: + if( IsVideoCall( aErrorInfo.iCallId ) ) + { + SendGlobalInfoNoteL( EPhoneErrorInConnection ); + } + else + { + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); + } + break; + + case ECCPErrorCCFacilityRejected: + if( IsVideoCall( aErrorInfo.iCallId ) ) + { + SendGlobalInfoNoteL( EPhoneNoteTextRequestRejected ); + } + else + { + SendGlobalErrorNoteL( EPhoneNoteTextRequestRejected, ETrue ); } break; case ECCPTransferFailed: - SendGlobalErrorNoteL( EPhoneNoteTextRequestRejected ); + SendGlobalErrorNoteL( EPhoneNoteTextRequestRejected, ETrue ); break; - case ECCPErrorCCServiceNotAvailable: case ECCPErrorCCBearerServiceNotImplemented: case ECCPErrorCCOnlyRestrictedDigitalInformationBCAvailable: + case ECCPErrorCCNonExistentMessageType: + case ECCPErrorCCIncompatibleMessageInProtocolState: + case ECCPErrorCCNonExistentInformationElement: + case ECCPErrorCCRecoveryOnTimerExpiry: + if ( IsVideoCall( aErrorInfo.iCallId ) ) + { + SendGlobalInfoNoteL( EPhoneNoteVideoCallNotPossible ); //Video call didn't succeed to called end. + } + else + { + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); + } + break; + case ECCPErrorCCServiceNotImplemented: if( IsVideoCall( aErrorInfo.iCallId ) ) { SendGlobalInfoNoteL( EPhoneNoteCallInfoServiceNotAvailable ); } + break; + + case ECCPErrorCCServiceNotAvailable: + if( IsVideoCall( aErrorInfo.iCallId ) ) + { + SendGlobalInfoNoteL( EPhoneErrorInConnection ); + } else { - SendGlobalWarningNoteL( EPhoneErrorInConnection ); + SendGlobalWarningNoteL( EPhoneErrorInConnection, ETrue ); } break; case ECCPErrorCUGOutgoingCallsBarred: - SendGlobalInfoNoteL( EPhoneOutgoingCallsBarredWithinCUG ); + SendGlobalInfoNoteL( EPhoneOutgoingCallsBarredWithinCUG, ETrue ); break; case ECCPErrorCUGNotSelected: - SendGlobalInfoNoteL( EPhoneNoCUGSelected ); + SendGlobalInfoNoteL( EPhoneNoCUGSelected, ETrue ); break; case ECCPErrorCUGIndexUnknown: - SendGlobalInfoNoteL( EPhoneUnknownCUGIndex ); + SendGlobalInfoNoteL( EPhoneUnknownCUGIndex, ETrue ); break; case ECCPErrorCUGIndexIncompatible: - SendGlobalInfoNoteL( EPhoneCUGIndexIncompatible ); + SendGlobalInfoNoteL( EPhoneCUGIndexIncompatible, ETrue ); break; case ECCPErrorCUGCallsFailure: - SendGlobalInfoNoteL( EPhoneCUGCallsFailure ); + SendGlobalInfoNoteL( EPhoneCUGCallsFailure, ETrue ); break; case ECCPErrorCLIRNotSubscribed: - SendGlobalInfoNoteL( EPhoneCLIRNotSubscribed ); + SendGlobalInfoNoteL( EPhoneCLIRNotSubscribed, ETrue ); break; case ECCPErrorCCBSPossible: @@ -567,6 +674,8 @@ aErrorInfo.iErrorCode); break; } + + iCallId = KErrNotFound; } // ----------------------------------------------------------- @@ -587,7 +696,7 @@ return ( iStateMachine->PhoneEngineInfo() ->CallType( aCallId )== EPECallTypeVideo ); } - + // ----------------------------------------------------------- // CPhoneErrorMessagesHandler::IsVoiceCall // ----------------------------------------------------------- @@ -606,5 +715,464 @@ return ( iStateMachine->PhoneEngineInfo() ->CallType( aCallId )== EPECallTypeCSVoice ); } + +// ----------------------------------------------------------- +// CPhoneErrorMessagesHandler::GetCauseCode +// ----------------------------------------------------------- +// +TBool CPhoneErrorMessagesHandler::GetCauseCode( + TInt &aCauseCode, TInt &aResourceId, TBool &aNotification ) const + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneErrorMessagesHandler::CauseCode() "); + + aCauseCode = KErrNotFound; + aNotification = ETrue; + TInt callId = (KErrNotFound == iCallId) ? + iStateMachine->PhoneEngineInfo()->CallId() : + iCallId; + + + //get exit code error from call data + TInt callError = iStateMachine->PhoneEngineInfo()->ProtocolError( + callId ); + + switch( callError ) + { + case KErrGsmCCUnassignedNumber: + aResourceId = EPhoneNumberNotInUse; + aCauseCode = 1; + break; + + case KErrGsmCCNoRouteToDestination: + aResourceId = EPhoneErrorInConnection; + aCauseCode = 3; + break; + + case KErrGsmCCChannelUnacceptable: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 6; + break; + + case KErrGsmCCOperatorDeterminedBarring: + aResourceId = EPhoneNumberBarred; + aCauseCode = 8; + break; + + case KErrGsmCCUserBusy: + aResourceId = EPhoneNumberBusy; + aCauseCode = 17; + break; + + case KErrGsmCCUserNotResponding: + aResourceId = EPhoneNoAnswer; + aCauseCode = 18; + break; + + case KErrGsmCCUserAlertingNoAnswer: + aResourceId = EPhoneNoAnswer; + aCauseCode = 19; + break; + + case KErrGsmCCCallRejected: + if ( !iStateMachine->PhoneEngineInfo()->IsOutgoingCallBarringActivated() ) + { + aResourceId = EPhoneNoteCalledNumberHasBarredIncomingCalls; + aCauseCode = 21; + aNotification = (EFalse == IsVideoCall( callId )); + } + break; + + case KErrGsmCCNumberChanged: + aResourceId = EPhoneNumberNotInUse; + aCauseCode = 22; + break; + + case KErrGsmCCNonSelectedUserClearing: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNotePhoneOutOf3GCoverage; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneNoAnswer; + } + aCauseCode = 26; + break; + + case KErrGsmCCDestinationOutOfOrder: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 27; + break; + + case KErrGsmCCInvalidNumberFormat: + aResourceId = EPhoneInvalidPhoneNumber; + aCauseCode = 28; + break; + + case KErrGsmCCFacilityRejected: + aResourceId = EPhoneNoteTextRequestRejected; + aCauseCode = 29; + break; + + case KErrGsmCCResponseToStatusEnquiry: + aResourceId = EPhoneErrorInConnection; + aCauseCode = 30; + break; + + case KErrGsmCCNormalUnspecified: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNotePhoneOutOf3GCoverage; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneNoAnswer; + } + aCauseCode = 31; + break; + + case KErrGsmCCNoChannelAvailable: + aResourceId = EPhoneNetworkBusy; + aCauseCode = 34; + break; + + case KErrGsmCCNetworkOutOfOrder: + aResourceId = EPhoneErrorInConnection; + aCauseCode = 38; + break; + + case KErrGsmCCTemporaryFailure: + aResourceId = EPhoneNetworkBusy; + aCauseCode = 41; + break; + + case KErrGsmCCSwitchingEquipmentCongestion: + aResourceId = EPhoneNetworkBusy; + aCauseCode = 42; + break; + + case KErrGsmCCAccessInformationDiscarded: + aResourceId = EPhoneErrorInConnection; + aCauseCode = 43; + break; + + case KErrGsmCCRequestedChannelNotAvailable: + aResourceId = EPhoneNetworkBusy; + aCauseCode = 44; + break; + + case KErrGsmCCResourceNotAvailable: + aResourceId = EPhoneErrorInConnection; + aCauseCode = 47; + break; + + case KErrGsmCCQualityOfServiceNotAvailable: + aResourceId = EPhoneErrorInConnection; + aCauseCode = 49; + break; + + case KErrGsmCCRequestedFacilityNotSubscribed: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallOnlyPossibleUnder3GCoverage; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneNoteTextNotAllowed; + } + aCauseCode = 50; + break; + + case KErrGsmCCIncomingCallsBarredInCug: + aResourceId = EPhoneNumberBarred; + aCauseCode = 55; + break; + + case KErrGsmCCBearerCapabilityNotAuthorised: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteUnableToMakeVideoCallNotSupportedByOtherPhone; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 57; + break; + + case KErrGsmCCBearerCapabilityNotCurrentlyAvailable: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 58; + break; + + case KErrGsmCCServiceNotAvailable: + aResourceId = EPhoneErrorInConnection; + aCauseCode = 63; + break; + + case KErrGsmCCBearerServiceNotImplemented: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 65; + break; + + case KErrGsmCCAcmGreaterThanAcmMax: + aResourceId = EPhoneErrorInConnection; + aCauseCode = 68; + break; + + case KErrGsmCCRequestedFacilityNotImplemented: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNotePhoneOutOf3GCoverage; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneNoteTextCheckNetworkservices; + } + aCauseCode = 69; + break; + + case KErrGsmCCOnlyRestrictedDigitalInformationBCAvailable: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneNoteTextCheckNetworkservices; + } + aCauseCode = 70; + break; + + case KErrGsmCCServiceNotImplemented: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 79; + break; + + case KErrGsmCCInvalidCallReferenceValue: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 81; + break; + + case KErrGsmCCUserNotInCug: + aResourceId = EPhoneNumberNotInCUG; + aCauseCode = 87; + break; + + case KErrGsmCCIncompatibleDestination: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteUnableToMakeVideoCallNotSupportedByOtherPhone; + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 88; + break; + + case KErrGsmCCInvalidTransitNetworkSelection: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 91; + break; + + case KErrGsmCCSemanticallyIncorrectMessage: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 95; + break; + + case KErrGsmCCInvalidMandatoryInformation: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 96; + break; + + case KErrGsmCCNonExistentMessageType: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 97; + break; + + case KErrGsmCCIncompatibleMessageInProtocolState: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 98; + break; + + case KErrGsmCCNonExistentInformationElement: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 99; + break; + + case KErrGsmCCConditionalIEError: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 100; + break; + + case KErrGsmCCIncompatibleMessageInCallState: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 101; + break; + + case KErrGsmCCRecoveryOnTimerExpiry: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 102; + break; + + case KErrGsmCCUnspecifiedProtocolError: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 111; + break; + + case KErrGsmCCUnspecifiedInterworkingError: + if ( IsVideoCall( callId ) ) + { + aResourceId = EPhoneNoteVideoCallNotPossible; //Video call didn't succeed to called end. + aNotification = EFalse; + } + else + { + aResourceId = EPhoneErrorInConnection; + } + aCauseCode = 127; + break; + default: + break; + } + + return (aCauseCode != KErrNotFound); + } // End of File