phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp
branchRCL_3
changeset 61 41a7f70b3818
parent 58 40a3f856b14d
child 62 5266b1f337bd
--- 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