phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontacthandler.cpp
changeset 0 e686773b3f54
child 8 62e2cd501189
child 14 81f8547efd4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontacthandler.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,550 @@
+/*
+* Copyright (c) 2007-2007 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 details view plugin
+*
+*/
+
+
+#include "ccappcommlauncherheaders.h"
+#include <centralrepository.h>
+#include <VPbkVariant.hrh>
+
+// ======== LOCAL FUNCTIONS ========
+
+// --------------------------------------------------------------------------
+// MatchContactField
+// --------------------------------------------------------------------------
+//
+TBool MatchContactField( 
+    const CCmsContactFieldItem::TCmsContactField* aKey, 
+    const CCmsContactField& aField )
+    {
+    if ( *aKey == aField.Type() )
+        return ETrue;
+    else
+        return EFalse;
+    }
+
+// ======== MEMBER FUNCTIONS ========
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::CCCAppCommLauncherContactHandler
+// --------------------------------------------------------------------------
+//
+CCCAppCommLauncherContactHandler::CCCAppCommLauncherContactHandler(
+    MCCAppContactHandlerNotifier& aObserver,
+    CCCAppCommLauncherPlugin& aPlugin):
+        iObserver( aObserver ),
+        iDynamicAddressGroupSet( 0 ),
+        iDefaultAttributesBitMask( 0 ),
+        iPlugin(aPlugin)
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherContactHandler()"));
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::~CCCAppCommLauncherContactHandler
+// --------------------------------------------------------------------------
+//
+CCCAppCommLauncherContactHandler::~CCCAppCommLauncherContactHandler()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("~CCCAppCommLauncherContactHandler()"));
+    if ( iCmsWrapper )
+        {
+        iCmsWrapper->RemoveObserver( *this );
+        iCmsWrapper->Release();
+        }
+    iDynamicVoipAddressGroup.Close();
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::NewL
+// --------------------------------------------------------------------------
+//
+CCCAppCommLauncherContactHandler* CCCAppCommLauncherContactHandler::NewL(
+    MCCAppContactHandlerNotifier& aObserver,
+    CCCAppCommLauncherPlugin& aPlugin )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherContactHandler::NewL()"));
+    CCCAppCommLauncherContactHandler* self =
+        new ( ELeave ) CCCAppCommLauncherContactHandler( aObserver,
+            aPlugin ) ;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherContactHandler::NewL()"));
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ConstructL
+// --------------------------------------------------------------------------
+//
+void CCCAppCommLauncherContactHandler::ConstructL()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherContactHandler::ConstructL()"));
+    iCmsWrapper = CCCAppCmsContactFetcherWrapper::InstanceL();
+    
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherContactHandler::ConstructL()"));
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::RequestContactDataL
+// --------------------------------------------------------------------------
+//    
+void CCCAppCommLauncherContactHandler::RequestContactDataL()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherContactHandler::RequestContactDataL()"));
+    
+    // 1st fetch whatever fetched so far
+    const CCmsContactFieldInfo* info = iCmsWrapper->ContactInfo();//not owned
+    if ( info )// if NULL, info fetching not completed
+        {
+        CCA_DP(KCommLauncherLogFile, CCA_L("::RequestContactDataL() - info available"));
+        ContactInfoFetchedNotifyL( *info );
+        // if info is fetched, there can be actual fields fetched also
+        RPointerArray<CCmsContactField> fieldArray = iCmsWrapper->ContactFieldDataArray();//not owned
+        const TInt count = fieldArray.Count();
+        CCA_DP(KCommLauncherLogFile, CCA_L("::RequestContactDataL - fetched field array count: %d"), count );
+        for ( TInt i = 0; i < count; i++ )
+            {
+            
+            CCmsContactField& contactField = *fieldArray[i];
+            ContactFieldFetchedNotifyL( contactField );           
+            
+            if ( CCmsContactFieldItem::ECmsFullName == contactField.Type() )
+                {// update titlepane with the name 
+                TPtrC newTxt = contactField.ItemL( 0 ).Data();
+                iPlugin.SetTitleL( newTxt );
+                }                
+            }
+        iObserver.ContactFieldFetchingCompletedL();
+        }
+
+    // 2nd register as observer for following events
+    iCmsWrapper->AddObserverL( *this );
+        
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherContactHandler::RequestContactDataL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactFieldDataObserverNotifyL
+// ---------------------------------------------------------------------------
+//  
+void CCCAppCommLauncherContactHandler::ContactFieldDataObserverNotifyL( 
+        MCCAppContactFieldDataObserver::TParameter& aParameter )
+    {
+    if ( MCCAppContactFieldDataObserver::TParameter::EContactInfoAvailable 
+        == aParameter.iType && NULL != aParameter.iContactInfo )
+        {
+        ContactInfoFetchedNotifyL( *aParameter.iContactInfo );
+        }
+    else if ( MCCAppContactFieldDataObserver::TParameter::EContactDataFieldAvailable 
+        == aParameter.iType && NULL != aParameter.iContactField )
+        {
+        TRAP_IGNORE( ContactFieldFetchedNotifyL( *aParameter.iContactField ));
+        if ( CCCAppCmsContactFetcherWrapper::EOperationsCompleted 
+             & aParameter.iStatusFlag )
+            {
+            iObserver.ContactFieldFetchingCompletedL();
+            }
+        }
+    else if ( MCCAppContactFieldDataObserver::TParameter::EContactsChanged 
+        == aParameter.iType )
+        {
+        iObserver.ContactsChangedL();
+        }
+    else if (MCCAppContactFieldDataObserver::TParameter::EContactPresenceChanged == aParameter.iType)
+        {
+        iObserver.ContactPresenceChangedL(*aParameter.iContactField);
+        }
+   }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactFieldDataObserverHandleErrorL
+// ---------------------------------------------------------------------------
+//  
+void CCCAppCommLauncherContactHandler::ContactFieldDataObserverHandleErrorL( 
+    TInt aState, TInt aError )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("::ContactFieldDataObserverHandleErrorL - aState: %d, aError: %d"), aState, aError );
+    //todo; what kind of behaviour is wanted in error case?
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactInfoFetchedNotifyL
+// --------------------------------------------------------------------------
+//
+void CCCAppCommLauncherContactHandler::ContactInfoFetchedNotifyL( 
+    const CCmsContactFieldInfo& aContactFieldInfo )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherContactHandler::ContactInfoFetchedNotifyL()"));
+
+    iDefaultAttributesBitMask = 0;
+
+    //PERFORMANCE LOGGING: 9. Contact info notify received
+    WriteToPerfLog();
+
+    iObserver.ContactInfoFetchedNotifyL( aContactFieldInfo );
+
+    //PERFORMANCE LOGGING: 10. Contact info notify consumed
+    WriteToPerfLog();
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherContactHandler::ContactInfoFetchedNotifyL()"));
+    }
+    
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactFieldFetchedNotifyL
+// --------------------------------------------------------------------------
+//   
+void CCCAppCommLauncherContactHandler::ContactFieldFetchedNotifyL( 
+    /*const*/ CCmsContactField& aContactField )//todo; should be const!
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherContactHandler::ContactFieldFetchedNotifyL()"));
+    
+    UpdateDefaultAttributes( aContactField );
+    iObserver.ContactFieldFetchedNotifyL( aContactField );
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherContactHandler::ContactFieldFetchedNotifyL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::AddressAmount
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppCommLauncherContactHandler::AddressAmount( 
+    VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction )
+    {
+    return iCmsWrapper->GetContactActionFieldCount(aContactAction);
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::IsServiceAvailable
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppCommLauncherContactHandler::IsServiceAvailable( 
+    VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction )
+    {
+    return iCmsWrapper->IsServiceAvailable( aContactAction );
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactStore
+// --------------------------------------------------------------------------
+// 
+TCmsContactStore CCCAppCommLauncherContactHandler::ContactStore() const
+    {
+    return iCmsWrapper->ContactStore();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactFieldDataArray
+// ---------------------------------------------------------------------------
+//
+RPointerArray<CCmsContactField>& CCCAppCommLauncherContactHandler::ContactFieldDataArray()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherContactHandler::ContactFieldDataArray()"));    
+    return iCmsWrapper->ContactFieldDataArray();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactIdentifierLC
+// ---------------------------------------------------------------------------
+//
+HBufC8* CCCAppCommLauncherContactHandler::ContactIdentifierLC()
+    {
+    return iCmsWrapper->ContactIdentifierLC();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::UpdateDefaultAttributes
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherContactHandler::UpdateDefaultAttributes(
+    const CCmsContactField& aContactField )
+    {
+    iDefaultAttributesBitMask |= aContactField.HasDefaultAttribute();         
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::MapContactorTypeToCMSDefaultType
+// ---------------------------------------------------------------------------
+//
+CCmsContactFieldItem::TCmsDefaultAttributeTypes 
+    CCCAppCommLauncherContactHandler::MapContactorTypeToCMSDefaultType( 
+        VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction )
+    {
+    CCmsContactFieldItem::TCmsDefaultAttributeTypes returnValue
+        = CCmsContactFieldItem::ECmsDefaultTypeUndefined; 
+    
+    switch( aContactAction )
+        {
+        case VPbkFieldTypeSelectorFactory::EVoiceCallSelector:        
+            returnValue = CCmsContactFieldItem::ECmsDefaultTypePhoneNumber;
+            break;
+        case VPbkFieldTypeSelectorFactory::EUniEditorSelector:        
+            returnValue = CCmsContactFieldItem::ECmsDefaultTypeMms;
+            break;
+        case VPbkFieldTypeSelectorFactory::EEmailEditorSelector:        
+            returnValue = CCmsContactFieldItem::ECmsDefaultTypeEmail;
+            break;
+        case VPbkFieldTypeSelectorFactory::EInstantMessagingSelector:
+            returnValue = CCmsContactFieldItem::ECmsDefaultTypeImpp;
+            break;
+        case VPbkFieldTypeSelectorFactory::EVOIPCallSelector:        
+            returnValue = CCmsContactFieldItem::ECmsDefaultTypeVoIP;
+            break;
+        case VPbkFieldTypeSelectorFactory::EURLSelector:
+            returnValue = CCmsContactFieldItem::ECmsDefaultTypeUrl;
+            break;
+        case VPbkFieldTypeSelectorFactory::EVideoCallSelector:        
+            returnValue = CCmsContactFieldItem::ECmsDefaultTypeVideoNumber;
+            break;
+        case VPbkFieldTypeSelectorFactory::EPocSelector:
+            returnValue = CCmsContactFieldItem::ECmsDefaultTypePOC;
+            break;
+        default:
+            break;
+        }
+    return returnValue;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::HasDefaultAttribute
+// ---------------------------------------------------------------------------
+//
+TBool CCCAppCommLauncherContactHandler::HasDefaultAttribute(
+    VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction )
+    {
+    return MapContactorTypeToCMSDefaultType( aContactAction ) & iDefaultAttributesBitMask;
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactFieldItemDataL
+// --------------------------------------------------------------------------
+//
+void CCCAppCommLauncherContactHandler::ContactFieldItemDataL(
+    const CCmsContactFieldItem::TCmsContactField aFieldType, TPtrC& aData )
+    {
+    RPointerArray<CCmsContactField>& cntFieldArray = 
+        iCmsWrapper->ContactFieldDataArray(); //not own
+    const TInt index = cntFieldArray.Find( aFieldType, MatchContactField );
+
+    if ( index >= 0 && index < cntFieldArray.Count() 
+         && cntFieldArray[index]->ItemCount() > 0 )
+        {
+        aData.Set( cntFieldArray[index]->ItemL( 0 ).Data() );
+        }
+    else
+        {
+        aData.Set( KNullDesC() );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ContactFieldTypeAndContactActionMatch
+// --------------------------------------------------------------------------
+//
+TBool CCCAppCommLauncherContactHandler::ContactFieldTypeAndContactActionMatch(
+    CCmsContactFieldItem::TCmsContactField aContactField,        
+    VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherContactHandler::ContactFieldTypeAndContactActionMatch()"));    
+    CCA_DP(KCommLauncherLogFile, CCA_L("::ContactFieldTypeAndContactActionMatch() - aContactAction: %d"), aContactAction );    
+    CCA_DP(KCommLauncherLogFile, CCA_L("::ContactFieldTypeAndContactActionMatch() - aContactField: %d"), aContactField );    
+    
+    TBool isMatch = EFalse;
+    
+    switch( aContactAction )
+        {
+        case VPbkFieldTypeSelectorFactory::EVoiceCallSelector:
+            isMatch = FieldArrayAndContactActionMatch( 
+                aContactField, KCCAppCommLauncherVoiceCallGroup, 
+                CCACOMMLAUNCHER_ROMARRAY_SIZE( KCCAppCommLauncherVoiceCallGroup )); 
+            break;
+        case VPbkFieldTypeSelectorFactory::EUniEditorSelector: 
+        	 TInt flags = 0;
+        	 CRepository* key = CRepository::NewL(TUid::Uid(KCRUidPhonebook));
+        	 TInt err = key->Get(KPhonebookLocalVariationFlags, flags);
+        	            
+        	 if ( flags & EVPbkLVShowEmailInSendMsg)
+        		 {
+        		 isMatch = FieldArrayAndContactActionMatch( 
+        		          aContactField, KCCAppCommLauncherMessageEmailGroup, 
+        		          CCACOMMLAUNCHER_ROMARRAY_SIZE( KCCAppCommLauncherMessageEmailGroup ));
+        		 }
+        	 else
+        		 {       	
+        		 isMatch = FieldArrayAndContactActionMatch( 
+        				 aContactField, KCCAppCommLauncherMessageGroup, 
+        				 CCACOMMLAUNCHER_ROMARRAY_SIZE( KCCAppCommLauncherMessageGroup )); 
+        		 }
+        	 delete key;
+        	 break;
+        case VPbkFieldTypeSelectorFactory::EEmailEditorSelector:        
+            isMatch = FieldArrayAndContactActionMatch( 
+                aContactField, KCCAppCommLauncherEmailGroup, 
+                CCACOMMLAUNCHER_ROMARRAY_SIZE( KCCAppCommLauncherEmailGroup )); 
+            break;
+        case VPbkFieldTypeSelectorFactory::EInstantMessagingSelector:
+            isMatch = FieldArrayAndContactActionMatch( 
+                aContactField, KCCAppCommLauncherChatGroup, 
+                CCACOMMLAUNCHER_ROMARRAY_SIZE( KCCAppCommLauncherChatGroup )); 
+            break;
+        case VPbkFieldTypeSelectorFactory::EVOIPCallSelector:
+            // note; dynamic construction required
+            ConstructDynamicFieldArrayIfNeeded( aContactAction );
+            isMatch = ( KErrNotFound != iDynamicVoipAddressGroup.Find( aContactField ));             
+            break;
+        case VPbkFieldTypeSelectorFactory::EURLSelector:        
+            isMatch = FieldArrayAndContactActionMatch( 
+                aContactField, KCCAppCommLauncherUrlGroup, 
+                CCACOMMLAUNCHER_ROMARRAY_SIZE( KCCAppCommLauncherUrlGroup )); 
+            break;            
+        case VPbkFieldTypeSelectorFactory::EVideoCallSelector:        
+            isMatch = FieldArrayAndContactActionMatch( 
+                aContactField, KCCAppCommLauncherVideoCallGroup, 
+                CCACOMMLAUNCHER_ROMARRAY_SIZE( KCCAppCommLauncherVideoCallGroup )); 
+            break;
+        case VPbkFieldTypeSelectorFactory::EFindOnMapSelector:
+            isMatch = FieldArrayAndContactActionMatch( 
+                aContactField, KCCAppCommLauncherAddressGroup, 
+                CCACOMMLAUNCHER_ROMARRAY_SIZE(
+                		KCCAppCommLauncherAddressGroup )); 
+            break;
+        default:
+            break;
+        }
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("::ContactFieldTypeAndContactActionMatch() - isMatch: %d"), isMatch );    
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherContactHandler::ContactFieldTypeAndContactActionMatch()"));    
+    return isMatch;
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::FieldArrayAndContactActionMatch
+// --------------------------------------------------------------------------
+//
+TBool CCCAppCommLauncherContactHandler::FieldArrayAndContactActionMatch(
+    CCmsContactFieldItem::TCmsContactField aContactField,
+    const TInt aFieldArray[], const TInt aCount )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherContactHandler::FieldArrayAndContactActionMatch()"));    
+    
+    for( TInt i = 0;i < aCount;i++ )
+        {
+        if ( aContactField == aFieldArray[i] )
+            return ETrue;
+        }
+
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::ConstructDynamicFieldArrayIfNeeded
+// --------------------------------------------------------------------------
+//
+void CCCAppCommLauncherContactHandler::ConstructDynamicFieldArrayIfNeeded(
+    VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherContactHandler::ConstructDynamicFieldArrayIfNeededL()"));    
+    
+    switch( aContactAction )
+        {
+        case VPbkFieldTypeSelectorFactory::EVOIPCallSelector: 
+            {
+            if ( !iDynamicAddressGroupSet & EDynamicVoipAddressGroupSet )
+                {
+                CreateDynamicVoipAddressGroup( IsServiceAvailable( aContactAction ));
+                iDynamicAddressGroupSet |= EDynamicVoipAddressGroupSet;
+                }
+            }
+            break;
+        default:
+            break;
+        }
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherContactHandler::ConstructDynamicFieldArrayIfNeededL()"));    
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::CreateDynamicVoipAddressGroup
+// --------------------------------------------------------------------------
+// 
+void CCCAppCommLauncherContactHandler::CreateDynamicVoipAddressGroup(
+    const TInt aVoipSupportFlag )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherContactHandler::CreateDynamicVoipAddressGroup()"));    
+    CCA_DP(KCommLauncherLogFile, CCA_L("::CreateDynamicVoipAddressGroup() - aVoipSupportFlag: %d"), aVoipSupportFlag );    
+   
+    iDynamicVoipAddressGroup.Reset();
+    if ( ECmsVoIPSupportBasic & aVoipSupportFlag )
+        {
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsVoipNumberGeneric );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsVoipNumberHome );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsVoipNumberWork );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsPushToTalk );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsShareView );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsSipAddress );
+        }
+    if ( ECmsVoIPSupportXspId & aVoipSupportFlag )
+        {
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsImpp );
+        }
+    if ( ECmsVoIPSupportCallout & aVoipSupportFlag )
+        {
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsMobilePhoneGeneric );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsMobilePhoneHome );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsMobilePhoneWork );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsLandPhoneGeneric );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsLandPhoneHome );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsLandPhoneWork );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsAssistantNumber );
+        iDynamicVoipAddressGroup.Append( CCmsContactFieldItem::ECmsCarPhone );                    
+        }
+    
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherContactHandler::CreateDynamicVoipAddressGroup()"));    
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::IsItNumberAddress
+// --------------------------------------------------------------------------
+// 
+TBool CCCAppCommLauncherContactHandler::IsItNumberAddress(
+     VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction )
+    {
+    if ( VPbkFieldTypeSelectorFactory::EVoiceCallSelector == aContactAction
+        || VPbkFieldTypeSelectorFactory::EUniEditorSelector == aContactAction
+        || VPbkFieldTypeSelectorFactory::EVOIPCallSelector == aContactAction
+        || VPbkFieldTypeSelectorFactory::EVideoCallSelector == aContactAction )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherContactHandler::IsItNumberAddress
+// --------------------------------------------------------------------------
+// 
+void CCCAppCommLauncherContactHandler::RefetchContactL()
+    {
+    iCmsWrapper->RefetchContactL();
+    iCmsWrapper->AddObserverL( *this );
+    }
+
+// End of file