phoneapp/phoneuiqtviewadapter/src/phonecallheaderutil.cpp
changeset 74 d1c62c765e48
child 76 cfea66083b62
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiqtviewadapter/src/phonecallheaderutil.cpp	Fri Sep 17 17:09:12 2010 +0300
@@ -0,0 +1,833 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  A parameter class for setting call header information
+*
+*/
+
+
+#include <mpeclientinformation.h>
+#include <StringLoader.h>
+#include <bautils.h>
+
+#include "phonecallheaderutil.h"
+#include "tphonecmdparamboolean.h"
+#include "cphonemainresourceresolver.h"
+#include "phonerssbase.h"
+#include "phoneui.pan"
+#include "cphonecenrepproxy.h"
+#include "telephonyvariant.hrh"
+#include "phoneviewcommanddefinitions.h"
+#include "phonelogger.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// PhoneCallHeaderUtil::PhoneCallHeaderUtil
+// -----------------------------------------------------------------------------
+//  
+PhoneCallHeaderUtil::PhoneCallHeaderUtil(
+        MPEEngineInfo& engineInfo ) 
+        : m_engineInfo( engineInfo),
+          iCallHeaderType( EPECallTypeUninitialized ),
+          iSetDivertIndication( EFalse ),
+          iLabelText( NULL ),
+          iEmergencyHeaderText( NULL ),
+          iAttemptingEmergencyText( NULL )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// PhoneCallHeaderUtil::~PhoneCallHeaderUtil
+// -----------------------------------------------------------------------------
+//  
+PhoneCallHeaderUtil::~PhoneCallHeaderUtil()
+    {
+    delete iLabelText;
+    
+    delete iEmergencyHeaderText;
+    
+    delete iAttemptingEmergencyText;
+    }
+
+// -----------------------------------------------------------
+// PhoneCallHeaderUtil::SetCallHeaderTexts
+// -----------------------------------------------------------
+//
+void PhoneCallHeaderUtil::SetCallHeaderTexts(
+    const TInt aCallId, 
+    const TBool aWaitingCall,
+    const TBool aVideoCall,
+    TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetCallHeaderTexts( ) ");
+    
+    TInt labelId(KPhoneRssCommonFirst);
+    
+    // Fetch engine info parameters.
+    const TBool auxLine( m_engineInfo.CallALSLine( aCallId ) == CCCECallParameters::ECCELineTypeAux );
+    const TBool cli( m_engineInfo.RemotePhoneNumber( aCallId ).Length());
+    const TBool cnap( m_engineInfo.RemotePartyName( aCallId ).Length());
+    const TInt numberType( m_engineInfo.RemotePhoneNumberType( aCallId ));
+    
+    __PHONELOG2( EBasic, EPhoneControl, "PhoneCallHeaderUtil::SetCallHeaderTexts - NumberType(%d), CLI(%d)", numberType, cli );
+    __PHONELOG2( EBasic, EPhoneControl, "PhoneCallHeaderUtil::SetCallHeaderTexts - CNAP(%d), AuxLine(%d)", cnap, auxLine );
+    
+    if ( !cli && !cnap && numberType != EPEPrivateNumber && numberType != EPEUnknownNumber )
+        {
+        if ( auxLine )
+            {
+            if ( aWaitingCall )
+                {
+                labelId = EPhoneIncomingLine2WaitingText; // waiting, line 2
+                }
+            else
+                {
+                labelId = EPhoneIncomingLine2Text; // on line 2
+                }
+            }
+        // If CLIR, but also network limitation(e.g. EPEUnknownNumber), then second line 
+        // should be empty in call bubble.
+        else
+            {
+            labelId = KPhoneRssCommonFirst; // No second line in call bubble
+            }
+        }
+    else  // Voice or video call with CLI or with CNAP.
+        {
+        if ( aWaitingCall )
+            {
+            if ( auxLine  )
+                {
+                labelId = EPhoneIncomingLine2WaitingText; // waiting, line 2
+                }
+            else
+                {
+                labelId = EPhoneCallWaitingLabel; // waiting
+                }
+            }
+        else // Mo other calls
+            {
+            if ( auxLine )
+                {
+                labelId = EPhoneIncomingLine2CallingText; // calling, line 2
+                }
+            else
+                {
+                // If CLIR, but not network limitation, then second line 
+                // (calling or video call) should be shown in call bubble.
+                if ( aVideoCall )
+                    {
+                    labelId = EPhoneVideoCallIncoming; // video call
+                    }
+                else
+                    {
+                    labelId = EPhoneIncomingCallLabel; // calling
+                    }
+                }
+            }
+        }
+    __PHONELOG1( EBasic, EPhoneControl, "PhoneCallHeaderUtil::SetCallHeaderTexts - labelId(%d)", labelId );
+    LoadCallHeaderTexts( labelId, aCallHeaderData );
+    }
+ 
+// -----------------------------------------------------------
+// PhoneCallHeaderUtil::LabelText
+// -----------------------------------------------------------
+//
+const TDesC& PhoneCallHeaderUtil::LabelText( TInt aCallId )
+    {
+
+    if (iLabelText)
+        {
+        delete iLabelText;
+        iLabelText = NULL;
+        }
+    
+    switch (m_engineInfo.CallState(aCallId))
+        {
+        case EPEStateDisconnecting:
+            {
+            iLabelText = LoadResource(EPhoneInCallDisconnected);
+            break;
+            }
+        case EPEStateHeld:
+        case EPEStateHeldConference:
+            {
+            iLabelText = LoadResource(EPhoneCallOnHold);
+            break;
+            }
+        case EPEStateConnectedConference:
+            {
+            iLabelText = LoadResource(EPhoneCLIConferenceCall);
+            break;
+            }
+        case EPEStateRinging:
+            {
+            TPhoneCmdParamCallHeaderData callHeaderData;
+            SetCallHeaderTexts(
+                aCallId, 
+                EFalse,
+                IsVideoCall( aCallId ),
+                &callHeaderData );           
+
+            if (callHeaderData.LabelText().Length())
+                {
+                iLabelText = callHeaderData.LabelText().Alloc();
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    
+    return iLabelText ? *iLabelText : KNullDesC();
+    }
+
+// -----------------------------------------------------------
+// PhoneCallHeaderUtil::EmergencyHeaderText
+// -----------------------------------------------------------
+//
+const TDesC& PhoneCallHeaderUtil::EmergencyHeaderText()
+    {
+    if (!iEmergencyHeaderText)
+        {
+        iEmergencyHeaderText = LoadResource(EPhoneEmergencyCallHeader);
+        }
+     
+    return iEmergencyHeaderText ? *iEmergencyHeaderText : KNullDesC();
+    }
+
+// -----------------------------------------------------------
+// PhoneCallHeaderUtil::AttemptingEmergencyText
+// -----------------------------------------------------------
+//
+const TDesC& PhoneCallHeaderUtil::AttemptingEmergencyText()
+    {
+    if (!iAttemptingEmergencyText)
+        {
+        iAttemptingEmergencyText = LoadResource(EPhoneAttemptingEmergencyText);
+        }
+     
+    return iAttemptingEmergencyText ? *iAttemptingEmergencyText : KNullDesC();
+    }
+
+// -----------------------------------------------------------
+// PhoneCallHeaderUtil::CallState
+// -----------------------------------------------------------
+//
+TInt PhoneCallHeaderUtil::CallState( TInt aCallId ) const
+    {
+    return m_engineInfo.CallState(aCallId);
+    }
+
+// -----------------------------------------------------------------------------
+// PhoneCallHeaderUtil::SetCliParamatersL
+// -----------------------------------------------------------------------------
+// 
+void PhoneCallHeaderUtil::SetCliParamaters(
+        const TInt aCallId, 
+        TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetCliParamatersL( ) ");
+    
+    // Set call header number type
+    aCallHeaderData->SetNumberType( m_engineInfo.RemotePhoneNumberType( aCallId ) );
+    
+    if ( ( m_engineInfo.RemotePhoneNumber( aCallId ).Length() ) && 
+         ( !ContactInfoAvailable( aCallId ) ) )
+        {
+        // Set phonenumber/URI as the CLI text for the call header      
+       aCallHeaderData->SetCLIText( m_engineInfo.RemotePhoneNumber( aCallId ),
+                 TPhoneCmdParamCallHeaderData::ELeft );
+            
+        // No contact name, use phonenumber when available.
+        aCallHeaderData->SetParticipantListCLI(
+                TPhoneCmdParamCallHeaderData::EPhoneParticipantCNAPText );
+        }
+    else
+        {
+        TPhoneCmdParamCallHeaderData::TPhoneTextClippingDirection cnapClippingDirection = TPhoneCmdParamCallHeaderData::ERight;
+        TBuf<KCntMaxTextFieldLength> remoteInfoText( KNullDesC );
+ 
+        TBool secondaryCli = GetRemoteInfoData( aCallId, remoteInfoText );
+        cnapClippingDirection = TPhoneCmdParamCallHeaderData::ELeft;
+
+        aCallHeaderData->SetCLIText( remoteInfoText,  TPhoneCmdParamCallHeaderData::ERight );
+        
+        if (secondaryCli)
+            {
+            aCallHeaderData->SetCNAPText( m_engineInfo.RemotePhoneNumber( aCallId ), 
+                cnapClippingDirection );
+            }
+        }
+    
+    SetCallerImage( aCallId, aCallHeaderData );
+
+    // Set the Caller text
+    if ( m_engineInfo.CallerText( aCallId ).Length() > 0 )
+        {
+        aCallHeaderData->SetCallerText( m_engineInfo.CallerText( aCallId ) );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// PhoneCallHeaderUtil::SetCallerImage
+// -----------------------------------------------------------------------------
+//     
+void PhoneCallHeaderUtil::SetCallerImage( 
+        const TInt aCallId, 
+        TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetCallerImage( ) ");
+    // Set the call header picture data if it is available
+    if ( ( m_engineInfo.CallerImage( aCallId ).Length() > 0 )  && 
+         ( BaflUtils::FileExists( CCoeEnv::Static()->FsSession(), 
+                 m_engineInfo.CallerImage( aCallId ) ) ) )
+        {
+        aCallHeaderData->SetPicture( m_engineInfo.CallerImage( aCallId ) );
+        }
+    else
+        {
+        // Set the thumbnail picture data if it is available
+        aCallHeaderData->SetHasThumbnail( m_engineInfo.HasCallerThumbnail( aCallId ) );
+        CFbsBitmap* picture = m_engineInfo.CallerThumbnail( aCallId );
+        if ( picture )
+            {
+            aCallHeaderData->SetThumbnail( picture );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::SetBasicCallHeaderParamsL
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::SetBasicCallHeaderParams(
+        const TInt aCallId, 
+        TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetBasicCallHeaderParamsL( ) ");
+    // Set call header call state
+    aCallHeaderData->SetCallState( 
+            m_engineInfo.CallState( aCallId ) );
+
+    // Set call header type            
+    aCallHeaderData->SetCallType( GetCallType( aCallId, aCallHeaderData ) );
+    
+    // Set call header voice privacy status
+    aCallHeaderData->SetCiphering( 
+            m_engineInfo.IsSecureCall( aCallId ) );
+    aCallHeaderData->SetCipheringIndicatorAllowed( 
+            m_engineInfo.SecureSpecified() );
+    
+    //see service provider settings API
+    aCallHeaderData->SetServiceId(
+            m_engineInfo.ServiceId( aCallId ) );
+       
+    // Set contact link, see virtual phonebook API
+    aCallHeaderData->SetContactLink(
+            m_engineInfo.ContactLink( aCallId ) );
+       
+    // Set remote phone number
+    aCallHeaderData->SetRemotePhoneNumber(
+            m_engineInfo.RemotePhoneNumber( aCallId ) );
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::GetCallType
+// ---------------------------------------------------------------------------
+//
+TPECallType PhoneCallHeaderUtil::GetCallType( 
+        const TInt aCallId,
+        TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::GetCallType( ) ");
+    // Set call header type.
+    TPECallType callType = 
+            m_engineInfo.CallType( aCallId );
+    SetCallHeaderType( callType );
+    
+    if ( m_engineInfo.CallALSLine( aCallId ) 
+         == CCCECallParameters::ECCELineTypeAux )
+        {
+        aCallHeaderData->SetLine2( ETrue );
+        }
+
+    __PHONELOG1( EBasic, EPhoneControl, 
+                "PhoneCallHeaderUtil::GetCallType() - callType: %d ", 
+                callType )
+    return callType;
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::SetCallHeaderType
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::SetCallHeaderType( 
+    TInt aCallHeaderType )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetCallHeaderType( ) ");
+    iCallHeaderType = aCallHeaderType;
+    __PHONELOG1( EBasic, EPhoneControl, 
+                    "PhoneCallHeaderUtil::SetCallHeaderType() - iCallHeaderType: %d ", 
+                    iCallHeaderType )
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::CallHeaderType
+// ---------------------------------------------------------------------------
+//
+TInt PhoneCallHeaderUtil::CallHeaderType() const
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::CallHeaderType( ) ");
+    __PHONELOG1( EBasic, EPhoneControl, 
+                        "PhoneCallHeaderUtil::CallHeaderType() - iCallHeaderType: %d ", 
+                        iCallHeaderType )
+    return iCallHeaderType;            
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::ContactInfoAvailable
+// ---------------------------------------------------------------------------
+//
+TBool PhoneCallHeaderUtil::ContactInfoAvailable( const TInt aCallId ) const
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::ContactInfoAvailable( ) ");
+    TBool contactAvailable = EFalse;
+    if ( ( m_engineInfo.RemoteName( aCallId ).Length() ) || 
+         ( m_engineInfo.RemoteCompanyName( aCallId ).Length() ) )
+        {
+        contactAvailable = ETrue;
+        }
+    return contactAvailable;
+    }
+
+// -----------------------------------------------------------------------------
+// PhoneCallHeaderUtil::SetCliAndCnapParamatersL
+// -----------------------------------------------------------------------------
+// 
+void PhoneCallHeaderUtil::SetCliAndCnapParamaters(
+        const TInt aCallId, 
+        TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetCliAndCnapParamatersL( ) ");
+    TBuf<KCntMaxTextFieldLength> cnapText( KNullDesC );
+
+    // Set call header number type
+    aCallHeaderData->SetNumberType( m_engineInfo.RemotePhoneNumberType( aCallId ) );
+        
+    const MPEClientInformation& info = 
+            m_engineInfo.CallClientInformation( aCallId );
+
+    if ( ( m_engineInfo.RemotePhoneNumber( aCallId ).Length() ) && 
+         ( !ContactInfoAvailable( aCallId ) ) && 
+         ( !info.ShowNumber() ) )
+        {
+        // No contact info data available; use the phone number
+        aCallHeaderData->SetCLIText(
+                m_engineInfo.RemotePhoneNumber( aCallId ),
+                TPhoneCmdParamCallHeaderData::ELeft);
+        
+        // No contact name, use phonenumber when available.
+        aCallHeaderData->SetParticipantListCLI( 
+                TPhoneCmdParamCallHeaderData::EPhoneParticipantCNAPText );
+        }
+    else
+        {
+        TBuf<KCntMaxTextFieldLength> remoteInfoText( KNullDesC );
+        
+        GetRemoteInfoData( aCallId, remoteInfoText );
+        aCallHeaderData->SetCLIText( remoteInfoText, TPhoneCmdParamCallHeaderData::ERight );
+        }
+
+    // Fetch CNAP text and clipping direction
+    TPhoneCmdParamCallHeaderData::TPhoneTextClippingDirection cnapClippingDirection;
+    GetCNAPText( aCallId, cnapText, cnapClippingDirection );
+    
+    // Set CNAP data 
+    aCallHeaderData->SetCNAPText( cnapText, cnapClippingDirection );
+    
+    // Set caller image 
+    SetCallerImage( aCallId, aCallHeaderData );
+
+    // Set the Caller text
+    if ( m_engineInfo.CallerText( aCallId ).Length() > 0 )
+        {
+        aCallHeaderData->SetCallerText( m_engineInfo.CallerText( aCallId ) );
+        }        
+    
+    // Set the call header CNAP data ( Contains possible CNAP name or received skype identification ).
+    if ( IsFeatureSupported( KTelephonyLVFlagUUS, aCallId ) )
+        {
+        aCallHeaderData->SetCNAPText( m_engineInfo.RemotePartyName( aCallId ), 
+                TPhoneCmdParamCallHeaderData::ERight );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::GetCNAPText
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::GetCNAPText( 
+    const TInt aCallId,
+       TDes& aData, 
+       TPhoneCmdParamCallHeaderData::TPhoneTextClippingDirection& aDirection ) const
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::GetCNAPText( ) ");
+    
+    // Set clipping direction  
+    aDirection = TPhoneCmdParamCallHeaderData::ERight;
+    
+    // If it's not a private number show further info
+    if ( m_engineInfo.RemotePhoneNumberType( aCallId ) != 
+        EPEPrivateNumber )
+        {
+        if ( ( m_engineInfo.RemoteName( aCallId ).Length() ||
+               m_engineInfo.RemotePartyName( aCallId ).Length() || 
+               m_engineInfo.RemoteCompanyName( aCallId ).Length() ) &&
+               m_engineInfo.RemotePhoneNumber( aCallId ).Length() )
+            {
+            // Use the phone number for the CNAP display
+            aData.Copy( m_engineInfo.RemotePhoneNumber( aCallId ) );
+            
+            // Clipping direction for non-private number
+            aDirection = TPhoneCmdParamCallHeaderData::ELeft;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::IsFeatureSupported
+// ---------------------------------------------------------------------------
+//
+TBool PhoneCallHeaderUtil::IsFeatureSupported( 
+        const TInt aFeatureKey, 
+        const TInt aCallId ) const
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::IsFeatureSupported( ) ");
+    TBool featureSupport(EFalse);
+    switch( aFeatureKey )
+        {
+        case KTelephonyLVFlagUUS:
+            {
+            if( ( CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported( aFeatureKey ) ) &&
+                ( m_engineInfo.RemotePartyName( aCallId ).Length() ) )
+                {
+                featureSupport = ETrue;
+                }
+            }
+            break;
+        default:
+            //Do nothing.
+            break;
+        }
+    __PHONELOG1( EBasic, EPhoneControl, 
+            "PhoneCallHeaderUtil::IsFeatureSupported() - featureSupport: %d ", 
+            featureSupport )
+    
+    return featureSupport;
+    }
+
+// ---------------------------------------------------------------------------
+// PhoneCallHeaderUtil::SetDivertIndicatorToCallHeader
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::SetDivertIndicatorToCallHeader( 
+    const TInt aCallId, 
+    TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetDivertIndicatorToCallHeader( ) ");
+    if( m_engineInfo.IncomingCallForwarded( aCallId ) )
+        {
+        aCallHeaderData->SetDiverted( ETrue );
+        }
+    
+    if ( m_engineInfo.CallALSLine( aCallId ) == CCCECallParameters::ECCELineTypeAux )
+        {
+        __PHONELOG( EBasic, EPhoneControl, 
+                "PhoneCallHeaderUtil::SetDivertIndicatorToCallHeader - CallALSLine() == CCCECallParameters::ECCELineTypeAux");
+        aCallHeaderData->SetLine2( ETrue );    
+        }        
+    }
+
+// ---------------------------------------------------------------------------
+// PhoneCallHeaderUtil::SetDivertIndication
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::SetDivertIndication( const TBool aDivertIndication )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetDivertIndication( ) ");
+    iSetDivertIndication = aDivertIndication;           
+    __PHONELOG1( EBasic, EPhoneControl, 
+                "PhoneCallHeaderUtil::SetDivertIndication() - iSetDivertIndication: %d ", 
+                iSetDivertIndication )
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::SetIncomingCallHeaderParams
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::SetIncomingCallHeaderParams(
+        const TInt aCallId, 
+        const TBool aWaitingCall,
+        const TBool aVideoCall,
+        TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetIncomingCallHeaderParamsL( ) ");
+    // Set basic params must be called before update is called.
+    SetBasicCallHeaderParams( aCallId, aCallHeaderData );
+    
+    // Set call header labels
+    SetCallHeaderTexts( 
+            aCallId, 
+            aWaitingCall, 
+            aVideoCall, 
+            aCallHeaderData );
+    
+    SetCliAndCnapParamaters( aCallId, aCallHeaderData );
+    
+    // Set divert indication to call header if needed.
+    SetDivertIndicatorToCallHeader( aCallId, aCallHeaderData );
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::SetOutgoingCallHeaderParams
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::SetOutgoingCallHeaderParams(
+        const TInt aCallId,
+        TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::SetOutgoingCallHeaderParams( ) ");
+    // Set basic params must be called before update is called.
+    SetBasicCallHeaderParams( aCallId, aCallHeaderData );
+    
+    // Set call header labels
+    if ( aCallHeaderData->CallType() == EPECallTypeVideo )
+        {
+        LoadCallHeaderTexts( 
+                EPhoneOutgoingVideoCallLabel, 
+                aCallHeaderData );
+        }
+    else
+        {
+        LoadCallHeaderTexts( 
+                EPhoneOutgoingCallLabel, 
+                aCallHeaderData );
+        }
+    
+    SetCliParamaters( aCallId, aCallHeaderData );
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::UpdateCallHeaderInfo
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::UpdateCallHeaderInfo( 
+        const TInt aCallId,
+        const TBool aWaitingCall,
+        const TBool aVideoCall,
+        TPhoneCmdParamCallHeaderData* aCallHeaderData )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "PhoneCallHeaderUtil::UpdateCallHeaderInfoL( ) ");
+    TBuf<KCntMaxTextFieldLength> remoteInfoText( KNullDesC );
+    
+    // Set call header type
+    GetCallType( aCallId, aCallHeaderData );
+    
+    // Set CLI text for the call header
+    TBool secondaryCli = GetRemoteInfoData( aCallId, remoteInfoText );
+    if ( remoteInfoText != KNullDesC )
+        {
+        aCallHeaderData->SetCLIText( remoteInfoText, TPhoneCmdParamCallHeaderData::ERight );
+        if ( secondaryCli )
+            {
+            aCallHeaderData->SetCNAPText( m_engineInfo.
+                RemotePhoneNumber( aCallId ), TPhoneCmdParamCallHeaderData::ELeft );       
+            }
+        }
+    else
+        {
+        aCallHeaderData->SetCLIText( 
+            m_engineInfo.RemotePhoneNumber( aCallId ),
+                TPhoneCmdParamCallHeaderData::ELeft );
+        }
+
+    // If KTelephonyLVFlagUUS is enabled it will over write RemotePartyName setting.
+    // Contains possible CNAP name or received skype identification
+    if ( IsFeatureSupported( KTelephonyLVFlagUUS, aCallId ) )
+        {
+        TBuf<KCntMaxTextFieldLength> remotePartyName( KNullDesC );
+        remotePartyName.Copy( m_engineInfo.RemotePartyName( aCallId ) );
+       
+        if ( m_engineInfo.CallState( aCallId ) == EPEStateRinging )
+            {
+            // Set CNAP text  
+            aCallHeaderData->SetCNAPText( remotePartyName, TPhoneCmdParamCallHeaderData::ERight );
+            }
+        else
+            {
+            aCallHeaderData->SetCLIText( remotePartyName, TPhoneCmdParamCallHeaderData::ERight );
+            }
+        }   
+    
+    // Set call header labels
+    SetCallHeaderTexts( 
+            aCallId, 
+            aWaitingCall, 
+            aVideoCall, 
+            aCallHeaderData );
+            
+    // Update caller image
+    SetCallerImage( 
+            aCallId, 
+            aCallHeaderData ); 
+    }
+
+
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::GetRemoteInfoDataL
+// ---------------------------------------------------------------------------
+//
+TBool PhoneCallHeaderUtil::GetRemoteInfoData( 
+        const TInt aCallId, 
+        TDes& aData ) const 
+    {
+    __LOGMETHODSTARTEND( EPhoneControl, "PhoneCallHeaderUtil::GetRemoteInfoDataL() ");
+    __PHONELOG1( EBasic, EPhoneControl, "PhoneCallHeaderUtil::GetRemoteInfoDataL() - call id =%d ", aCallId);
+    
+    TBool secondaryCli(EFalse);
+        
+    if ( aCallId == KEmergencyCallId )
+        {
+        // Set emergency label text
+        LoadResource( aData, EPhoneEmergencyCallHeader );
+        }
+    else
+        {
+        const RMobileCall::TMobileCallRemoteIdentityStatus identity = 
+                m_engineInfo.RemoteIdentity( aCallId );
+        // Note next if-statements are in priority order so be careful if you change order
+        // or add new if-statements.
+        if ( m_engineInfo.RemoteName( aCallId ).Length() )
+            {
+            // Display the contact name if it is available
+            aData.Copy( m_engineInfo.RemoteName( aCallId ) );
+            secondaryCli = ETrue;
+            }
+        else if ( m_engineInfo.RemotePartyName( aCallId ).Length() )
+            {
+            // Display the CNAP or UUS info if it is available.
+            aData.Copy( m_engineInfo.RemotePartyName( aCallId ) );
+            secondaryCli = ETrue;
+            }
+        else if ( m_engineInfo.RemoteCompanyName( aCallId ).Length() )
+            {
+            // Display the company name if it is available
+            aData.Copy( m_engineInfo.RemoteCompanyName( aCallId ) );
+            }
+        else if ( m_engineInfo.CallDirection( aCallId ) == RMobileCall::EMobileTerminated )
+            {
+            if ( EPEPrivateNumber == m_engineInfo.RemotePhoneNumberType( aCallId ) )
+                {
+                if ( EPECallTypeVoIP == CallHeaderType() )
+                    {
+                    // TODO LoadResource( aData, iManagerUtility.Customization()->CustomizeCallHeaderText() );
+                    }
+                else
+                    {
+                    // private number
+                    LoadResource( aData, EPhoneCLIWithheld );
+                    }
+                }
+            else if ( identity == RMobileCall::ERemoteIdentityUnavailableNoCliCoinOrPayphone || 
+                    identity == RMobileCall::ERemoteIdentityAvailableNoCliCoinOrPayphone )
+                {
+                // Display "Payphone".
+                LoadResource( aData, EPhoneCLIPayphone );
+                }
+            else if ( identity == RMobileCall::ERemoteIdentityUnknown )
+                {
+                __PHONELOG( EBasic, EPhoneControl, "GetRemoteInfoDataL : unknown number" );
+                // Display "Unknown Number".
+                LoadResource( aData, EPhoneCallCLIUnknown );
+                }
+            else if ( m_engineInfo.RemotePhoneNumber( aCallId ).Length() )
+                {
+                // Display the number if it is available
+                aData.Copy( m_engineInfo.RemotePhoneNumber( aCallId ) );
+                }            
+            }
+
+        }
+    return secondaryCli;
+    }
+
+// -----------------------------------------------------------
+// PhoneCallHeaderUtil::LoadCallHeaderTexts
+// -----------------------------------------------------------
+//
+void PhoneCallHeaderUtil::LoadCallHeaderTexts(
+    const TInt aLabelId, 
+    TPhoneCmdParamCallHeaderData* aCallHeaderData ) 
+    {
+    if ( aLabelId != EPhoneStringList )
+        {
+        TBuf<KPhoneCallHeaderLabelMaxLength> labelText( KNullDesC );
+        LoadResource( labelText, aLabelId );
+        aCallHeaderData->SetLabelText( labelText );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// PhoneCallHeaderUtil::LoadResource
+// ---------------------------------------------------------------------------
+//
+void PhoneCallHeaderUtil::LoadResource( TDes& aData, const TInt aResource ) const
+    {
+    StringLoader::Load(  
+            aData, CPhoneMainResourceResolver::Instance()->ResolveResourceID( aResource ), 
+            CCoeEnv::Static() );
+    }
+
+// ---------------------------------------------------------------------------
+// PhoneCallHeaderUtil::LoadResource
+// ---------------------------------------------------------------------------
+//
+HBufC* PhoneCallHeaderUtil::LoadResource( const TInt aResource ) const
+    {
+    HBufC* ret = NULL;
+    
+    TRAP_IGNORE( ret = StringLoader::LoadL(  
+            CPhoneMainResourceResolver::Instance()->ResolveResourceID( aResource ), 
+            CCoeEnv::Static() ) );
+    
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+//  PhoneCallHeaderUtil::IsVideoCall
+// ---------------------------------------------------------------------------
+//
+TBool PhoneCallHeaderUtil::IsVideoCall(int aCallId ) const
+    {
+    if( aCallId < 0 )
+        {
+        return ( m_engineInfo.CallTypeCommand()
+            == EPECallTypeVideo );  
+        }
+    return ( m_engineInfo.CallType( aCallId )
+            == EPECallTypeVideo );
+    }