phoneclientserver/callui/src/cauiengine/cauiengine.cpp
changeset 51 12bc758d6a02
parent 48 78df25012fda
child 53 25b8d29b7c59
--- a/phoneclientserver/callui/src/cauiengine/cauiengine.cpp	Fri Sep 17 17:09:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1392 +0,0 @@
-/*
-* Copyright (c) 2004-2005 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:  Implementation of CallUIEngine.
-*
-*/
-
-
-// INCLUDE FILES
-#include    "cauiengine.h" 
-#include    "cauiquery.h" // CCaUiQuery. 
-#include    <mcauireconnectqueryobserver.h>  // MCaUiReconnectQueryObserver.
-#include    <callui.rsg> // Resources. 
-#include    <cphcltdialer.h> // CPhcltDialer. 
-#include    <cphonecntfactory.h>
-#include    <cphcntsingleitemfetch.h>
-#include    <aiwinternaldialdata.h>
-#include    <aiwservicehandler.h> 
-#include    <cphcltextphonedialdata.h> // CPhCltExtPhoneDialData 
-
-#include    "callui.loc"                // Localized strings.
-
-#include    <stringloader.h> // String Loader. 
-#include    <aknnotewrappers.h>         // CAknInformationNote.
-#include    <akngloballistquery.h> // CAknGloballistQuery. 
-#include    <featmgr.h>                 // FeatureManager.
-
-#include    <aknglobalconfirmationquery.h> // Confirmation query.
-
-#include    <phcltutils.h> // Character removal. 
-#include    <aiwcommon.h> // AIW dialdata. 
-
-#include    <networkhandlingdomainpskeys.h> 
-#include    <e32property.h>             // Pub&Sub functionality.
-
-#include    "cauivoipextension.h" // VoIP/SCCP profile store 
-
-#include    <centralrepository.h>
-#include    <settingsinternalcrkeys.h> 
-#include     "cauilogger.h" // Call Ui Logger 
-#include    <aknmessagequerydialog.h> 
-#include    <aknglobalnote.h>
-#include    <mphcntstoreloader.h>
-#include    <mvpbkcontactstore.h> 
-
-#include "cauidialogs.h" 
-
-// CONSTANTS
-
-// GSM Network.
-const TInt KCaUiEngGsmNetwork = ENWNetworkModeGsm;
-// WCDMA Network.
-const TInt KCaUiEngWcdmaNetwork = ENWNetworkModeWcdma;
-
-
-_LIT( KCallTypeUriParam, "call-type" );
-_LIT( KCallTypeVideo, "video" );
-_LIT( KSemiColon, ";" );
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::CCaUiEngine
-// 
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CCaUiEngine::CCaUiEngine()
-:   iResourceLoader( *CCoeEnv::Static() )
-    {
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::ConstructL
-// 
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::ConstructL()
-    {
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::ConstructL() Begin");
-    // Sets up TLS, must be done before FeatureManager is used.
-    FeatureManager::InitializeLibL();
-
-    if ( CCoeEnv::Static() )
-        {
-        // Open CallUI resource file.
-        TFileName* name = new ( ELeave ) TFileName( KCallUIResFile );
-        CleanupStack::PushL( name );
-        User::LeaveIfError( iResourceLoader.Open( *name ) );
-        CleanupStack::PopAndDestroy( name );
-        }
-
-    // Get info is VoIP supported
-    iVoIPProfileHandler = CCaUiVoIPExtension::NewL();
-    iLongPressSet = ECaUiLongPressKeyNotSet;
-
-    iServiceSelector = CConvergedServiceSelector::NewL();
-
-    iDialogs = CCaUiDialogs::NewL( *this );
-    
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::ConstructL() Complete");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::NewL
-// 
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCaUiEngine* CCaUiEngine::NewL()
-    {
-    CCaUiEngine* self = new( ELeave ) CCaUiEngine;
-    
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::~CCaUEngine
-// 
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CCaUiEngine::~CCaUiEngine()
-    {
-    delete iServiceSelector;
-    
-    // Delete VoIP extension if VoIP is supported
-    if ( iVoIPProfileHandler )
-        {
-        delete iVoIPProfileHandler;
-        }
-    
-    delete iEmergencyCall;      
-    delete iContactSelector;
-    delete iFactory;
-    delete iVTSettingQuery;
-
-    // Clear dial components.
-    ClearDialContents();
-
-    if ( CCoeEnv::Static() )
-        {
-        // Close resource loader.
-        iResourceLoader.Close();
-        }
-    // Delete the menubuffer.
-    delete iBuf;
-    iBuf = NULL;
-  
-    delete iVTString;
-    iVTString = NULL;
-
-    delete iContactStoreLoader;
-    delete iDialogs;
-    
-    // Frees the TLS! Must be done after FeatureManager is used.
-    FeatureManager::UnInitializeLib();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::DialL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::DialL(
-    MCaUiDialResultObserver& aObserver,
-    const TDesC8& aDialData,
-    const TCaUiCallType aCallType )
-    {
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::DialL() Begin");
-    iDialogs->SetReconfQueryOngoing( EFalse );
-    // If iPhCltDialer and iDialData exist, 
-    // destroy them and create new ones. This clears the dial data.
-    ClearDialContents();
-    iPhCltDialer = CPhCltExtPhoneBase::NewL( this );
-    iObserver = &aObserver;
-    iDialData = CPhCltExtPhoneDialData::NewL();
-   
-    CAiwInternalDialData* aiwDialData = CAiwInternalDialData::NewLC( aDialData );
-    
-    TPhCltTelephoneNumber  aiwTelNumber( aiwDialData->PhoneNumber() );
-    HBufC* uriParams = FindAndRipURIParametersL( aiwTelNumber );
-    CleanupStack::PushL( uriParams );
-    aiwDialData->SetPhoneNumberL( aiwTelNumber );
-    
-
-    // ConvertDialDataL overwrites, if given in aDialData
-    SetDialDataCallType( aCallType );
-    
-    // Convert AIW dial data to PhoneClient format.
-    ConvertDialDataL( *aiwDialData  );
-    
-    // Check if there has been a long press of Send key
-    if ( iDialData->InitiateCall() )
-        {
-        HandleLongPressOfSendKeyL();
-        }
-    
-    iDialData->SetSendKeyPressed( 
-        IsSendKeyPressed( aCallType, aiwDialData->CallType() ) );
-    
-
-    // By default call is made, unless user cancels the procedure.
-    TBool createCall = ETrue;
-
-    TPhCltCallType callType = iDialData->CallType();
-    
-    if ( aCallType == ECaUiCallTypeVoice )
-        {
-        iDialData->SetCallType( EPhCltVoice );
-        }
-    // If not forced video call is wanted, ask user to confirm it.
-    // ECaUiCallTypeUnknown indicates that the call is not made from options menu.
-    else if ( iDialData->CallType() == EPhCltVideo 
-                            && aCallType == ECaUiCallTypeUnknown )
-        {
-        // Get preferred call-type from URI params, it will be passed to
-        // list query and selected by default
-        callType = CallTypeFromUriParams( *uriParams );
-        // If query is canceled, then call is not made.
-        createCall = iDialogs->LaunchCreateListQueryL( callType );
-        // Set the call type, video must be forced
-        if ( EPhCltVideo == callType )
-            {
-            iDialData->SetCallType( EPhCltForcedVideo );
-            }
-        else
-            {
-            iDialData->SetCallType( callType );
-            }
-        }
-    else if ( aCallType == ECaUiCallTypeInternet )
-        {
-        iDialData->SetCallType( EPhCltCallVoIP );
-        }
-    else if ( aCallType == ECaUiCallTypeVideo )
-        {
-        // (Forced) video call must be created.
-        iDialData->SetCallType( EPhCltForcedVideo );
-        }
-        
-    CleanupStack::PopAndDestroy( uriParams );
-    
-    
-    
-    // If user did not Cancel query or query was not shown, 
-    // perform the dial operation.
-    if ( createCall )
-        {
-        if ( iDialData->ContactLink() != KNullDesC8() 
-            && !aiwDialData->PhoneNumber().Length() )
-            {
-
-            TBool storeLoaded 
-                = LaunchContactStoreLoadingL( iDialData->ContactLink() );
-            if ( storeLoaded )
-                {
-                // Launch address select.
-                // aCallType describes which selector is used. ( VoIP/PhoneNumber )
-                LaunchAddressSelectL( iDialData->ContactLink(), aCallType );
-                }
-            }
-        else 
-            {
-            PhoneClientDialL( NULL );
-            }
-        }
-    else
-        {
-        HandleDialL( KErrCancel );
-        }
-    
-    CleanupStack::PopAndDestroy( aiwDialData );
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::DialL() End");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::LaunchNoNetSupNoteL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::LaunchNoNetSupNoteL()
-    {
-
-    iDialogs->LaunchNoNetSupNoteL();
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::LaunchReconConfQueryL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::LaunchReconConfQueryL( 
-    MCaUiReconnectQueryObserver& aObserver,
-    CPhCntMatcher* aPhCntMatcher,
-    const TPtrC aPhoneNumber,
-    const TBool aIncludeVideoCallOption )
-    {
-    // Empty pointer.
-    TPtrC ptrc;
-
-    iDialogs->LaunchReconConfQueryL(
-        aObserver,
-        aPhCntMatcher,
-        aPhoneNumber,
-        aIncludeVideoCallOption,
-        ptrc );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::CancelReconConfQuery
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::CancelReconConfQuery()
-    {
-
-    iDialogs->CancelReconConfQuery();
-
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::LaunchNoteAndReconConfQueryL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::LaunchNoteAndReconConfQueryL( 
-    MCaUiReconnectQueryObserver& aObserver,
-    CPhCntMatcher* aPhCntMatcher,
-    const TPtrC aPhoneNumber,
-    const TBool aIncludeVideoCallOption,
-    const TPtrC aNoteText )
-    {
-    // Empty pointer.
-    const TPtrC ptrc;
-
-    iDialogs->LaunchNoteAndReconConfQueryL( 
-        aObserver,
-        aPhCntMatcher,
-        aPhoneNumber,
-        aIncludeVideoCallOption,
-        aNoteText,
-        ptrc );
-
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::CancelNoteAndReconConfQuery
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::CancelNoteAndReconConfQuery()
-    {
-
-    iDialogs->CancelNoteAndReconConfQuery();
-
-    }
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::LaunchAddressSelectL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-TBool CCaUiEngine::LaunchAddressSelectL(
-    TDes& aTelNum, 
-    const TInt aContactId,
-    const TBool aVoIPAddressSelect )
-    {
-    TBool addressSelected( EFalse );
-    TCaUiCallType callType( ECaUiCallTypeVoice );
-
-    if ( aVoIPAddressSelect )
-        {
-        callType = ECaUiCallTypeInternet;
-        }
-    
-    addressSelected = LaunchAddressSelectL( aTelNum, aContactId, callType );
-
-    return addressSelected;
-    }
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::CancelAddressSelect
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::CancelAddressSelect()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// From MPhCntStoreLoaderObserver.
-// CCaUiEngine::ContactStoreLoadingCompleted
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::ContactStoreLoadingCompleted( 
-        MVPbkContactStore* /*aStore*/, TInt aErrorCode )
-    {
-    TInt result( aErrorCode );
-    
-    if ( KErrNone == result )
-        {
-        TCaUiCallType caUiCallType( ECaUiCallTypeUnknown );
-        ConvertPhCltCallType( iDialData->CallType(), caUiCallType );
-        
-        TRAP( result, 
-            LaunchAddressSelectL( iDialData->ContactLink(), caUiCallType ) );
-        }
-    
-    if ( KErrNone != result )
-        {
-        TRAP_IGNORE( HandleDialL( aErrorCode ) );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::HandleDialL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::HandleDialL( const TInt aStatus )
-    {
-    if ( iObserver )
-        {
-        iObserver->HandleDialResultL( aStatus );
-        }
-    if ( !iDialogs->IsReconfQueryOngoing() )
-        {
-        ClearDialContents();
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::OptionSelected
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::OptionSelected( TCaUiReconType aReconType )
-    {
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::OptionSelected() Begin");
-    if ( aReconType == ECallUiReconTypeVoice ||
-         aReconType == ECallUiReconTypeVideo )
-        {
-        // Call is wanted to be made. Do it only if Dial data exists.
-        if ( iDialData )
-            {
-          
-            iDialogs->SetReconfQueryOngoing( EFalse );
-
-            if( aReconType == ECallUiReconTypeVoice )
-                {
-                // Make sure that call type is correct, i.e. voice call.
-                iDialData->SetCallType( EPhCltVoice );
-                }
-            else
-                {
-                // Make sure that call type is correct, i.e. video call.
-                iDialData->SetCallType( EPhCltVideo );
-                }
-
-            TRAPD( err, iPhCltDialer->DialL( *iDialData ) );
-            if( err )
-                {
-                CAUILOGSTRING2("CALLUI: >>>CCaUiEngine DialL error = %d", err );
-                }
-            }
-        }
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::OptionSelected() End");
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::ConvertDialDataL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-
-void CCaUiEngine::ConvertDialDataL(
-    const CAiwInternalDialData& aAiwDialData )
-    {
-    // Telephony number.
-    iDialData->SetTelephoneNumber( aAiwDialData.PhoneNumber().Left( 
-        iDialData->TelephoneNumber().MaxLength() ) );
-
-    // Call type.
-    CAiwDialData::TCallType aiwCallType = aAiwDialData.CallType();
-    TPhCltCallType phCltCallType = EPhCltVoice;
-
-    // After this the call type should be correct one.
-    if ( aiwCallType == CAiwDialData::EAIWVideo )
-        {
-        phCltCallType = EPhCltVideo;
-        iDialData->SetCallType( phCltCallType );
-        }
-    else if ( aiwCallType == CAiwDialData::EAIWForcedVideo )
-        {
-        phCltCallType = EPhCltForcedVideo;
-        iDialData->SetCallType( phCltCallType );
-        }
-    else if ( aiwCallType == CAiwDialData::EAIWVoiP )
-        {
-        phCltCallType = EPhCltCallVoIP;
-        iDialData->SetCallType( phCltCallType );
-        }
-    else if ( aiwCallType == CAiwDialData::EAIWForcedCS )
-        {
-        phCltCallType = EPhCltVoice; 
-        iDialData->SetCallType( phCltCallType );
-        }
-    
-
-    // Name.
-    iDialData->SetNameL( aAiwDialData.Name().Left( 
-        iDialData->Name().MaxLength() ) );
-
-    // Contact link.
-    iDialData->SetContactLinkL( aAiwDialData.ContactLink() );
-
-    // Window group.
-    iDialData->SetWindowGroup( aAiwDialData.WindowGroup() );
-
-    // Redial.
-    iDialData->SetRedial( aAiwDialData.Redial() );
-
-    // Redial maximum duration.
-    iDialData->SetRedialMaximumDuration( aAiwDialData.RedialMaximumDuration() );
-
-    // Show number.
-    iDialData->SetShowNumber( aAiwDialData.ShowNumber() );
-
-    // Match.
-    iDialData->SetAllowMatch( aAiwDialData.AllowMatch() );
-
-    // End other calls.
-    iDialData->SetEndOtherCalls( aAiwDialData.EndOtherCalls() );
-
-    // Subaddress.
-    iDialData->SetSubAddressL( aAiwDialData.SubAddress().Left( 
-        iDialData->SubAddress().MaxLength() ) );
-
-    // SAT call.
-    iDialData->SetSATCall( aAiwDialData.SATCall() );
-
-    // Bearer.
-    iDialData->SetBearerL( aAiwDialData.Bearer().Left( 
-        iDialData->Bearer().MaxLength() ) );
-    
-    // Set Long keypress activity. ETrue if client wants to initate 
-    // voice/video call.
-    iDialData->SetInitiateCall( aAiwDialData.InitiateCall() );
-
-    if ( aAiwDialData.ServiceId() )
-        {
-        iDialData->SetServiceId( aAiwDialData.ServiceId() );
-        }
-    // Remove invalid chars.
-    if( iDialData->CallType() != EPhCltCallVoIP )
-
-        {
-        TPhCltTelephoneNumber telnum;
-        telnum.Zero();
-        telnum = iDialData->TelephoneNumber();
-        PhCltUtils::RemoveInvalidChars( telnum );
-
-        iDialData->SetTelephoneNumber( telnum );
-        }
-    iDialData->SetUUIL( aAiwDialData.UUI() );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::ClearDialContents
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::ClearDialContents()
-    {
-    if ( iPhCltDialer )
-        {
-        delete iPhCltDialer;
-        iPhCltDialer = NULL;
-        }
-
-    if ( iDialData )
-        {
-        delete iDialData;
-        iDialData = NULL;
-        }
-
-    // Not owned, so just set to NULL.
-    iObserver = NULL;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::IsVoIPProfiles()
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-TBool CCaUiEngine::IsVoIPProfiles()
-    {
-    TBool isProfiles = EFalse;
-
-    TRAP_IGNORE( isProfiles = iVoIPProfileHandler->IsVoIPProfilesL() );
-      
-    return isProfiles; 
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::GetVoIPServiceIdsL()
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::GetVoIPServiceIdsL( RIdArray& aVoipServiceIds ) const
-    {
-    if ( FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) )
-        {
-        iVoIPProfileHandler->GetVoIPServiceIdsL( aVoipServiceIds );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::GetVoipServiceNameL()
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::GetVoipServiceNameL( TServiceId aServiceId, TDes& aServiceName ) const
-    {
-    iVoIPProfileHandler->GetVoipServiceNameL( aServiceId, aServiceName );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaUiEngine::LaunchAddressSelectL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CCaUiEngine::LaunchAddressSelectL( 
-    const TDesC8& aContactLink,
-    const TCaUiCallType aCallType )
-    {
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::LaunchAddressSelectL() start");
-    if ( !iFactory )
-        {
-        iFactory = CreateCntFactoryL();
-        }
-    if ( !iContactSelector ) 
-        {
-        iContactSelector = iFactory->CreateContactDataSelectionL();
-        }
-    
-    CPhCntContactDataSelection::TCallType callType;
-   
-    // if aCallType is ECaUiCallTypeUnknown call is not intitated from Call ui menu
-    // so have to use iDialDataCallType 
-    if ( aCallType != ECaUiCallTypeUnknown )  
-        {
-        ConvertCaUiCallType( aCallType, callType );
-        }
-    else
-        {
-        ConvertDialDataCallType( callType );
-        }
-        
-    iContactSelector->Cancel();
-    iContactSelector->SelectPhoneNumberForCallL( aContactLink, 
-                                                 callType, *this );
- 
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::LaunchAddressSelectL() end");
-    }
-
-    
-//------------------------------------------------------------------------------
-// CCaUiEngine::FindAndRipURIParametersL()
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-HBufC* CCaUiEngine::FindAndRipURIParametersL( TDes& aNumber ) const
-    {
-    HBufC* buf = NULL;    
-    TInt offset = aNumber.Locate( TChar( KSemiColon()[0] ) );
-    if( offset > 0 ) // Separator is no allowed to be a first char
-        {
-        __ASSERT_ALWAYS( offset <= aNumber.Length(), 
-            User::Leave( KErrGeneral ) );
-        buf = aNumber.Mid( offset ).AllocL();         
-        aNumber.SetLength( offset );           
-        }
-    else
-        {
-        buf = HBufC::NewL( 0 );
-        }
-    return buf;    
-    }
-   
-//------------------------------------------------------------------------------
-// CBrowserTelService::CallTypeFromUriParams()
-// 
-// 
-// -----------------------------------------------------------------------------
-//  
-TPhCltCallType CCaUiEngine::CallTypeFromUriParams( 
-                                           const TDesC& aUriParams ) const
-    {
-    TPhCltCallType type( EPhCltVoice ); // Default type is voice call
-    
-    TPtrC value( ParamValue( KCallTypeUriParam, aUriParams ) );
-    if( value.CompareF( KCallTypeVideo ) == 0 ) // URIs are case-insensitive.
-        {
-        type = EPhCltVideo;
-        }
-    // Otherwise return default type
-    return type;
-    }
-    
-//------------------------------------------------------------------------------
-// CBrowserTelService::ParamValue()
-// 
-// 
-// -----------------------------------------------------------------------------
-//     
-TPtrC CCaUiEngine::ParamValue( const TDesC& aName, const TDesC& aUri ) const
-    {  
-    TInt startIndex = 0;
-    TInt offset = 0;
-    TPtrC pairTmp( KNullDesC()  );
-    TPtrC ret( KNullDesC() );
-    TBool found = EFalse;
-
-    if( aName.Length() > 0 )
-        {
-        while( startIndex < aUri.Length() && !found )
-            {
-            pairTmp.Set( FindNextParamValuePair( aUri, startIndex ) );
-            offset = pairTmp.FindF( aName ); // URIs are case-insensitive.
-            if( offset >= 0 && 
-              ( offset + aName.Length() + 1 < pairTmp.Length() ) )
-                {
-                ret.Set( pairTmp.Mid( offset + aName.Length() + 1 ) );
-                found = ETrue;
-                }
-            }
-        }
-        
-    return ret;    
-    }    
-   
-//------------------------------------------------------------------------------
-// CCaUiEngine::FindNextParamValuePair()
-// 
-// 
-// -----------------------------------------------------------------------------
-//   
-TPtrC CCaUiEngine::FindNextParamValuePair( const TDesC& aUri, 
-                                           TInt& aStartIndex ) const
-    {  
-    TInt offset = 0;
-    TPtrC tmp( KNullDesC() );
-    TPtrC ret( KNullDesC() );
-
-    tmp.Set( aUri.Mid( aStartIndex ) );
-    // Search start mark for new paramter.
-    offset = tmp.Find( KSemiColon );
-    if( offset >= 0 )
-        {
-        if( aStartIndex + offset + KSemiColon().Length() < aUri.Length() ) 
-            {
-            // Move start index
-            aStartIndex += offset + KSemiColon().Length();
-        
-            // Store descriptor after start mark
-            tmp.Set( aUri.Mid( aStartIndex ) );
-            
-            // Search end mark (semi-colon)
-            offset = tmp.Find( KSemiColon );
-            if ( offset >= 0 )
-                {
-                // If end mark was found store the param/value pair
-                ret.Set( tmp.Left( offset ) );
-                }
-            else
-                { 
-                // If end mark is not found, 
-                // the rest of descriptor belong to this parameter
-                ret.Set( tmp );
-                }      
-            }
-        }
-    
-    // Move start offset based on findings    
-    if( ret.Length() )
-        {
-        aStartIndex += ret.Length();
-        }
-    else
-        {
-        aStartIndex = aUri.Length();
-        }        
-
-    return ret;
-    }    
-
-// ---------------------------------------------------------
-//  CCaUiEngine::HandleFirstLongPressOfSendKeyL()
-// ---------------------------------------------------------
-//
-TBool CCaUiEngine::HandleFirstLongPressOfSendKeyL()
-    {
-    TBool set( EFalse );    
-    
-    TInt result = iDialogs->QueryVideoCallDefaultActionL();
-       
-    // Check user decision and set return value accordingly     
-    switch ( result )
-        {
-        case EAknSoftkeyYes: // from avkon.hrh
-            set = ETrue;
-            break;
-        case EAknSoftkeyNo:            
-            set = EFalse;
-            break;                                                           
-        default:        
-            set = EFalse;
-            break;
-        }    
-    return set;
-    }
-
-// ---------------------------------------------------------
-//  CCaUiEngine::HandleLongPressOfSendKeyL()
-// ---------------------------------------------------------
-//    
-void CCaUiEngine::HandleLongPressOfSendKeyL()
-    {
-        
-    // Check if the setting is already ON -> make a video call
-    if ( iLongPressSet == ECaUiLongPressKeyInUse )
-        {
-        // ON -> initiate a video call 
-        // (Forced) video call must be created
-        iDialData->SetCallType( EPhCltForcedVideo );
-        }
-    // Check if the setting is already OFF -> make a voice call
-    else if ( iLongPressSet == ECaUiLongPressKeyNotInUse )
-        {
-        // OFF -> initiate a voice call
-        // Voice call must be created
-        iDialData->SetCallType( EPhCltVoice );    
-        }
-    // If the setting has never been set, check what the user wants to do
-    else if ( iLongPressSet == ECaUiLongPressKeyNotSet )
-        {
-           // Ask from the user how long press of Send key should be handled
-        TBool set = HandleFirstLongPressOfSendKeyL();
-    
-        if ( set )
-            {
-            // User answered YES -> initiate a video call
-            // (Forced) video call must be created
-            iLongPressSet = ECaUiLongPressKeyInUse;
-            iDialData->SetCallType( EPhCltForcedVideo );
-            }
-        else
-            {
-            // User answered NO -> initiate a voice call
-            // Voice call must be created
-            iLongPressSet = ECaUiLongPressKeyNotInUse; 
-            iDialData->SetCallType( EPhCltVoice );
-            }              
-        }        
-    }
-
-// ---------------------------------------------------------
-//  CCaUiEngine::SelectionDone()
-// ---------------------------------------------------------
-//     
-void CCaUiEngine::SelectionDone( CPhCntSelectedData* aContactData, 
-                                  TInt aErrorCode )
-    {
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::SelectionDone() Start");
-    CAUILOGSTRING2("CALLUI: >>>SelectionDone() ECode = %d", aErrorCode );
-    if ( aErrorCode == KErrNone )
-        {
-        TPhCltTelephoneNumber phoneNumber;
-        HBufC8* fieldLink = NULL;
-        
-        if ( iDialData->TelephoneNumber() == KNullDesC )
-            {
-            phoneNumber = aContactData->Data();
-
-            // Do not remove illegal chars if call type is VOIP and
-            // call is made to a voip number
-            if ( !( EPhCltCallVoIP == iDialData->CallType() &&
-                    aContactData->NumberType()==MPhCntMatch::EVoipNumber ) )
-                {                    
-                PhCltUtils::RemoveInvalidChars( phoneNumber );
-                }                                    
-            iDialData->SetTelephoneNumber( phoneNumber );
-            }
-        if ( aContactData->FieldLink().Length() > 0 )
-            {
-            fieldLink = aContactData->FieldLink().Alloc();
-            }
-        
-        TRAP( aErrorCode, PhoneClientDialL( fieldLink ) );
-      
-        delete fieldLink;
-        fieldLink = NULL;
-        }
-        
-    if ( aErrorCode != KErrNone )
-        {
-        TRAP_IGNORE( HandleDialL( aErrorCode ) );
-        }            
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::SelectionDone() End");
-    }
-// ---------------------------------------------------------
-//  CCaUiEngine::PhoneClientDialL()
-// ---------------------------------------------------------
-// 
-void CCaUiEngine::PhoneClientDialL( const TDesC8* aFieldLink )
-    {
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::DialL()::PhoneClient dial Start");
-    
-    TBool createCall( ETrue );
-    TInt error( KErrNone );
-    
-    if ( aFieldLink )
-        {
-        iDialData->SetContactLinkL( *aFieldLink );
-        }
-    
-    // Check if number is emergency number and if it is 
-    // then call emeregency call
-    if ( !iEmergencyCall )
-        {
-        iEmergencyCall = CPhCltEmergencyCall::NewL( this );
-        }
-    if ( IsEmergencyNumber() )
-        {
-        createCall = EFalse;
-        error = KErrNone;
-        iEmergencyCall->DialEmergencyCallL( iDialData->TelephoneNumber() );
-        }
-    
-    if ( createCall )
-        {
-        CConvergedServiceSelector::TSsResult results;
-        
-        error = iServiceSelector->GetCallingServiceByCallType( 
-                        results,
-                        ServiceSelectorCallType(),
-                        iDialData->ServiceId(),
-                        iDialData->SendKeyPressed(),
-                        iDialData->TelephoneNumber() );
-            
-        if ( KErrNone == error )
-            {
-            SetSelectorResults( results );
-            }
-        else
-            {
-            createCall = EFalse;
-            }
-        }
-    
-    // Here note launch + query if this is video call and we
-    // are not in 3G network.
-   
-    if ( createCall )
-        {
-        if ( ( iDialData->CallType() == EPhCltVideo ) ||
-             ( iDialData->CallType() == EPhCltForcedVideo ) )
-            {
-            if ( !IsVideoCallAllowedL() )
-                {
-                createCall = EFalse;
-                error = KErrCancel;
-                }
-            }
-        }
-    if ( createCall )
-        {
-        CAUILOGSTRING("CALLUI: >>>CCaUiEngine::DialL(): Call PhoneClientdial");
-        iPhCltDialer->DialL( *iDialData );
-        }
-    else 
-        {        
-        //User cancelled. Need to inform client.
-        if ( error != KErrNone ) // Emergency call does not need to inform client. 
-            {
-            HandleDialL( error );
-            }
-         }
-    CAUILOGSTRING("CALLUI: >>>CCaUiEngine::DialL()::PhoneClient dial End");
-    }
-    
-// ---------------------------------------------------------
-//  CCaUiEngine::SetDialDataCallType()
-// ---------------------------------------------------------
-// 
-void CCaUiEngine::SetDialDataCallType( const TCaUiCallType aCallType )
-    {
-    if ( aCallType == ECaUiCallTypeVoice )
-        {
-        // Voice call must be created.
-        iDialData->SetCallType( EPhCltVoice );
-        }
-    else if ( aCallType == ECaUiCallTypeVideo )
-        {
-        // (Forced) video call must be created.
-        iDialData->SetCallType( EPhCltForcedVideo );
-        }
-    else if ( aCallType == ECaUiCallTypeInternet )
-        {
-        // VoIP call must be created.
-        iDialData->SetCallType( EPhCltCallVoIP );
-        }
-    else
-        {
-        // else Voice call is ok.
-        iDialData->SetCallType( EPhCltVoice );
-        }
-    }
-    
-// ---------------------------------------------------------
-//  CCaUiEngine::IsEmergencyNumber()
-// ---------------------------------------------------------
-//
-TBool CCaUiEngine::IsEmergencyNumber()
-    {
-    TBool isEmergencyNumber( EFalse );
-    
-    // get phonenumber from iDialData and heck number using phoneclient
-    // emergencycall api
-    TInt result = iEmergencyCall->IsEmergencyPhoneNumber(
-        iDialData->TelephoneNumber(), 
-        isEmergencyNumber );
-   
-    return isEmergencyNumber;
-    }
-
-// ---------------------------------------------------------
-//  CCaUiEngine::IsVideoCallAllowedL()
-// ---------------------------------------------------------
-// 
-TBool CCaUiEngine::IsVideoCallAllowedL()
-    {
-    TInt err = KErrNone;
-    TInt createCall( ETrue );
-    TInt networkMode = KCaUiEngGsmNetwork; // Default: GSM.               
-    err = RProperty::Get( KPSUidNetworkInfo, 
-                          KNWTelephonyNetworkMode, 
-                          networkMode );     
-   
-    if ( err )
-        {
-        // Information is not ok, so assume that
-        // we are in GSM network.
-        networkMode = KCaUiEngGsmNetwork;
-        }
-    // check network status
-    TInt nwStatus = ENWStatusRegistrationUnknown;
-    RProperty::Get( KPSUidNetworkInfo, KNWRegistrationStatus, nwStatus );
-
-    // If we are not in WCDMA network, then it is not allowed 
-    // to create a video call.
-    if ( networkMode != KCaUiEngWcdmaNetwork )
-        {     
-        TInt automaticredial = 0;
-        
-        GetCenRepValueL( KCRUidTelephonySettings, KSettingsAutomaticRedial, automaticredial );        
-        
-        // if no network, fall back to voice call for proper error handling
-        if ( (FeatureManager::FeatureSupported( KFeatureIdAutoRedialForVideoCall ) && automaticredial)
-              || nwStatus == ENWStatusRegistrationUnknown
-              || nwStatus == ENWStatusNotRegisteredNoService
-              || nwStatus == ENWStatusNotRegisteredEmergencyOnly
-              || nwStatus == ENWStatusNotRegisteredSearching )
-            {
-            // fallback to voice when no network support to videocall
-            // handled in Phone.
-            }
-        else
-            {
-            createCall = EFalse;
-            // Video call can not be done.
-            // => Launch Note + Reconnect Query.
-
-            // Empty pointer.
-            TPtrC ptrc;
-
-            iDialogs->LaunchNoteAndReconConfQueryL( 
-                *this,
-                NULL,
-                iDialData->TelephoneNumber(),
-                EFalse,
-                ptrc,
-                iDialData->Name() );
-            }
-        }
-    return createCall;
-    }
-// ---------------------------------------------------------
-//  CCaUiEngine::HandleEmergencyDialL()
-// ---------------------------------------------------------
-//    
-void CCaUiEngine::HandleEmergencyDialL( const TInt aStatus )
-    {
-    if ( iObserver )
-        {
-        iObserver->HandleDialResultL( aStatus );
-        }
-    }
-// ---------------------------------------------------------
-//  CCaUiEngine::GetCenRepValue()
-// ---------------------------------------------------------
-// 
-void CCaUiEngine::GetCenRepValueL( 
-        const TUid& aUid, 
-        const TUint aId,
-        TInt& aValue ) const
-    {
-    CRepository* repository = CRepository::NewL( aUid );
-    TInt err = repository->Get( aId, aValue );
-     
-    delete repository;
-    repository = NULL;
-     
-    if ( err != KErrNotFound ) // KErrNotFound acceptable.
-        {
-        User::LeaveIfError( err );
-        }
-    }
-
-// ---------------------------------------------------------
-//  CCaUiEngine::ConvertCaUiCallType( )
-// ---------------------------------------------------------
-//    
-void CCaUiEngine::ConvertCaUiCallType( const TCaUiCallType aCallType,
-                    CPhCntContactDataSelection::TCallType& aResultCallType  )
-    {
-    switch ( aCallType )
-        {
-        case ECaUiCallTypeVoice:
-            {
-            aResultCallType = CPhCntContactDataSelection::ECallPhoneNumber;
-            break;
-            }
-        case ECaUiCallTypeVideo:
-            {
-            aResultCallType = CPhCntContactDataSelection::ECallVideoNumber;
-            break;
-            }
-        case ECaUiCallTypeInternet:
-            {
-            aResultCallType = CPhCntContactDataSelection::ECallVoip;
-            break;
-            }
-        default:
-            {
-            aResultCallType = CPhCntContactDataSelection::ECallPhoneNumber;
-            break;
-            }
-        }
-    }
-    
-// ---------------------------------------------------------
-//  CCaUiEngine::ConvertDialDataCallType()
-// ---------------------------------------------------------
-//    
-void CCaUiEngine::ConvertDialDataCallType( CPhCntContactDataSelection::TCallType& aResultCallType )
-    {
-    switch ( iDialData->CallType() )
-        {
-        case EPhCltVoice:
-            {
-            aResultCallType = CPhCntContactDataSelection::ECallPhoneNumber;
-            break;
-            }
-        case EPhCltVideo:
-        case EPhCltForcedVideo:
-            {
-            aResultCallType = CPhCntContactDataSelection::ECallVideoNumber;
-            break;
-            }
-        case EPhCltCallVoIP:
-            {
-            aResultCallType = CPhCntContactDataSelection::ECallVoip;
-            break;
-            }
-        default:
-            {
-            aResultCallType = CPhCntContactDataSelection::ECallPhoneNumber;
-            break;
-            }
-        }
-    }
-
-
-// ---------------------------------------------------------
-//  CCaUiEngine::ConvertPhCltCallType
-// ---------------------------------------------------------
-//    
-void CCaUiEngine::ConvertPhCltCallType( const TPhCltCallType aCallType,
-        TCaUiCallType& aResultCallType ) const
-    {
-    switch ( aCallType )
-        {
-        case EPhCltVoice:
-            {
-            aResultCallType = ECaUiCallTypeVoice;
-            break;
-            }
-        case EPhCltVideo:
-        case EPhCltForcedVideo:
-            {
-            aResultCallType = ECaUiCallTypeVideo;
-            break;
-            }
-        case EPhCltCallVoIP:
-            {
-            aResultCallType = ECaUiCallTypeInternet;
-            break;
-            }
-        default:
-            {
-            break;
-            }
-        }
-    }
-
-
-// ---------------------------------------------------------
-//  CCaUiEngine::ServiceSelectorCallType()
-// ---------------------------------------------------------
-//    
-CConvergedServiceSelector::TSsCallType CCaUiEngine::ServiceSelectorCallType() const
-    {
-    CConvergedServiceSelector::TSsCallType ret;
-    
-    switch ( iDialData->CallType() )
-        {
-        case EPhCltVoice:
-            {
-            ret = CConvergedServiceSelector::ESsVoiceCall;
-            break;
-            }
-        case EPhCltVideo:
-        case EPhCltForcedVideo:
-            {
-            ret = CConvergedServiceSelector::ESsVideoCall;
-            break;
-            }
-        case EPhCltCallVoIP:
-            {
-            ret = CConvergedServiceSelector::ESsVoipCall;
-            break;
-            }
-        default:
-            {
-            ret = CConvergedServiceSelector::ESsVoiceCall;
-            break;
-            }
-        }
-    
-    return ret;
-    }
-
-// ---------------------------------------------------------
-//  CCaUiEngine::SetSelectorResults()
-// ---------------------------------------------------------
-//    
-void CCaUiEngine::SetSelectorResults( 
-        CConvergedServiceSelector::TSsResult& aResults )
-    {
-    switch ( aResults.iCallType )
-        {
-        case CConvergedServiceSelector::ESsVoipCall:
-            {
-            iDialData->SetCallType( EPhCltCallVoIP );
-            break;
-            }
-        case CConvergedServiceSelector::ESsVideoCall:
-            {
-            iDialData->SetCallType( EPhCltForcedVideo );
-            break;
-            }
-        case CConvergedServiceSelector::ESsVoiceCall:
-        default:
-            {
-            iDialData->SetCallType( EPhCltVoice );
-            break;
-            }
-        }
-    
-    iDialData->SetServiceId( aResults.iServiceId );
-    }
-
-
-// ---------------------------------------------------------
-//  CCaUiEngine::LaunchContactStoreLoadingL
-// ---------------------------------------------------------
-//  
-TBool CCaUiEngine::LaunchContactStoreLoadingL( const TDesC8& aContactLink )
-    {
-    if ( !iFactory )
-        {
-        iFactory = CreateCntFactoryL();
-        }
-    
-    if ( !iContactStoreLoader )
-        {
-        iContactStoreLoader = iFactory->CreateContactStoreLoaderL();
-        }
-    
-    TBool isStoreLoaded( 
-        iContactStoreLoader->IsContactStoreLoaded( aContactLink ) );
-    if ( !isStoreLoaded )
-        {
-        iContactStoreLoader->LoadContactStoreL( aContactLink, *this );        
-        }
-    
-    return isStoreLoaded;
-    }
-
-// ---------------------------------------------------------
-//  CCaUiEngine::IsSendKeyPressed
-// ---------------------------------------------------------
-//
-TBool CCaUiEngine::IsSendKeyPressed( TCaUiCallType aCallType,
-        CAiwDialData::TCallType aAiwCallType ) const
-    {
-    TBool isSendKeyPressed( EFalse );
-    if ( CAiwDialData::EAIWForcedCS != aAiwCallType )
-        {
-        if ( ECaUiCallTypeUnknown == aCallType )
-            {
-            isSendKeyPressed = ETrue;
-            }
-        }
-    
-    return isSendKeyPressed;
-    }
-
-// End of file