wvuing/wvuiprocess/Src/CCAContactEditPC.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiprocess/Src/CCAContactEditPC.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,883 @@
+/*
+* Copyright (c) 2006 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:  Process Component for Contact Editing
+*
+*/
+
+
+
+// ============================ HEADER FILES ===============================
+// INCLUDE FILES
+#include "CCAContactEditPC.h"
+#include "CCAStorageManagerFactory.h"
+#include "MCAPresence.h"
+#include "CAPresenceManager.h"
+#include "MCAMainViewArrayPC.h"
+#include "MCAContactLists.h"
+#include "MCAPresence.h"
+#include "MCAPresenceError.h"
+#include "MCAPresenceErrors.h"
+#include "MCAContactList.h"
+#include "CCAMainViewArrayPC.h"
+#include "CAUtils.h"
+
+#include "ChatDebugAssert.h"
+#include "ChatDebugPrint.h"
+
+#include "MCAStoredContact.h"
+#include "MCAStoredContacts.h"
+#include "MCAProcessManager.h"
+#include "MCASettingsPC.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::NewL
+// -----------------------------------------------------------------------------
+//
+CCAContactEditPC* CCAContactEditPC::NewL( MCASettingsPC& aCCASettingsPC )
+    {
+    CCAContactEditPC* self = CCAContactEditPC::NewLC( aCCASettingsPC );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::NewLC
+// -----------------------------------------------------------------------------
+//
+CCAContactEditPC* CCAContactEditPC::NewLC( MCASettingsPC& aCCASettingsPC )
+    {
+    CCAContactEditPC* self = new( ELeave ) CCAContactEditPC( aCCASettingsPC );
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CCAContactEditPC::~CCAContactEditPC()
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::CCAContactEditPC
+//
+// -----------------------------------------------------------------------------
+//
+
+CCAContactEditPC::CCAContactEditPC( MCASettingsPC& aCCASettingsPC )
+        :  iContact( NULL ),
+        iCCASettingsPC( aCCASettingsPC )
+
+    {
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetContactDetailsL
+//
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditPC::GetContactDetailsL(
+    const TBool aAliasEnabled,
+    const TBool aNicknameEnabled,
+    TBool&  aOwnData,
+    HBufC*& aOrigId,
+    HBufC*& aAlias,
+    HBufC*& aNickname,
+    HBufC*& aUserId,
+    HBufC*& aIdentification
+)
+    {
+
+    if ( iContact )
+        {
+        // found an existing contact, store the user id
+        aOwnData = iOwnData;
+        aUserId = iContact->UserId().AllocL();
+
+        aOrigId = iContact->UserId().AllocL();
+
+        aIdentification = iContact->Identification().AllocL();
+
+        if ( aAliasEnabled )
+            {
+
+            aAlias = iContact->Alias().AllocL();
+
+            if ( ! aAlias->Length() )
+                {
+                delete aAlias;
+                aAlias = NULL;
+
+                if ( aOwnData )
+                    {
+                    // this is our own status
+                    // so get the alias from engine
+                    aAlias = iCCASettingsPC.GetSapSettingValuePCL(
+                                 TEnumsPC::EOwnAlias, NULL );
+
+                    iContact->SetAliasL( aAlias ? ( *aAlias ) : KNullDesC() );
+
+                    }
+                }
+
+            }
+
+        if ( aNicknameEnabled )
+            {
+            aNickname = iContact->Nickname().AllocL();
+            }
+        }
+
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::IsWVIDAvailableAndValidL
+//
+// -----------------------------------------------------------------------------
+//
+
+TBool CCAContactEditPC::IsWVIDAvailableAndValidL( TBool aCreateNew,
+                                                  const TDesC&  aListId,
+                                                  const TDesC& aWVID, TBool& aContactInList,
+                                                  TDesC*& aUserID )
+    {
+
+    TBool retValue = EFalse;
+    TBool validContact = ETrue; //This is ETrue, if we are creating a new contact
+
+    // check if there's already a contact with same wvid
+    MCAStoredContacts* contacts =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+
+
+    MCAStoredContact* contactInList = contacts->FindContact( aListId, aWVID );
+
+    if ( !aCreateNew )
+        {
+        //if contact editor in EditMode
+        // validContact is EFalse if iContact not a valid contact
+        validContact = contacts->IsContactValid( iContact );
+        }
+
+
+    if ( contactInList && validContact )
+        {
+
+        retValue = ETrue;
+
+        if ( iContact != contactInList )
+            //this is a new contact
+            {
+            aContactInList = ETrue;
+            aUserID = const_cast <TDesC *>( &contactInList->UserId() );
+
+            }
+        }
+
+    return retValue;
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::FindAnyContactByNickL
+//
+// -----------------------------------------------------------------------------
+//
+
+TBool CCAContactEditPC::FindAnyContactByNickL( const TDesC& aNickName )
+    {
+    TBool retValue = EFalse;
+    MCAStoredContacts* contacts =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+
+    MCAStoredContact* contact = contacts->FindAnyContactByNick( aNickName );
+
+    if ( ( contact ) && ( contact != iContact ) )
+        {
+        retValue = ETrue;
+        }
+    return retValue;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::AddContactL
+//
+// -----------------------------------------------------------------------------
+//
+
+TInt CCAContactEditPC::AddContactL(
+    const TDesC& aListId,
+    const TDesC& aWVID, const TDesC& aNickName,
+    const TDesC& aAlias )
+    {
+    // fetch the contacts in list
+    MCAStoredContact *addedContact = NULL;
+    MCAPresence* presence = CAPresenceManager::InstanceL();
+    MCAContactLists* listInterface = presence->ContactLists();
+    TRAPD( err, addedContact = listInterface->AddServerContactL(
+                                   aListId, aWVID, aNickName ) );
+
+    if ( addedContact )
+        {
+        if ( &aAlias ) //time being fix for crash
+            {
+            addedContact->SetAliasL( aAlias );
+            }
+        iContact = addedContact;
+        }
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::UpdateContactL
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCAContactEditPC::UpdateContactL( const TDesC& aListId,
+                                       const TDesC& aWVID,
+                                       const TDesC& aNickName )
+    {
+    MCAPresence* presence = CAPresenceManager::InstanceL();
+    MCAContactLists* listInterface = presence->ContactLists();
+
+    TRAPD( err, listInterface->UpdateContactNicknameL( aListId, aWVID,
+                                                       aNickName ) );
+    return err;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::RemoveContactL
+//
+// -----------------------------------------------------------------------------
+//
+
+TInt CCAContactEditPC::RemoveContactL(
+    const TDesC& aListId,
+    const TDesC& aWVID )
+    {
+    // fetch the contacts in list
+    MCAPresence* presence = CAPresenceManager::InstanceL();
+    MCAContactLists* listInterface = presence->ContactLists();
+    TRAPD( err, listInterface->DeleteServerContactL( aListId, aWVID ) );
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::SetAnyContactL
+//
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditPC::SetAnyContactL( const TDesC& aWVID )
+    {
+    MCAStoredContacts* contacts =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+    MCAStoredContact* contact = contacts->FindAnyContact( aWVID );
+    iContact = contact;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::SetContactL
+//
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditPC::SetContactL( const TDesC& aListId,
+                                    const TDesC& aWVID )
+    {
+    MCAStoredContacts* contacts =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+    MCAStoredContact* contact = contacts->FindContact( aListId, aWVID );
+    iContact = contact;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetCurrentContactNickname
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContactEditPC::GetCurrentContactNickname() const
+    {
+    __CHAT_ASSERT_DEBUG( iContact );
+    return iContact->Nickname();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetCurrentContactUserId
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContactEditPC::GetCurrentContactUserId() const
+    {
+    __CHAT_ASSERT_DEBUG( iContact );
+    return iContact->UserId();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::InitialiseL
+//
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditPC::InitialiseL(
+    MCAMainViewArrayPC& aMainViewArrayPC,
+    const TInt index, TBool& aOwnStatus )
+    {
+
+    //reset the member variables
+    iOwnData = EFalse;
+    iContact = NULL;
+
+    CCAMainViewArrayPC& ccaMainViewArrayPC =
+        static_cast<CCAMainViewArrayPC&>( aMainViewArrayPC );
+    MCAStoredContacts* contactlist =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+    if ( index != -1 )
+        {
+        iContact = ccaMainViewArrayPC.GetContactForContactEditor( index ) ;
+
+        // check for own status
+        if ( iContact == &contactlist->OwnStatus() )
+            {
+            iOwnData = ETrue;
+            aOwnStatus = ETrue;
+            }
+
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::IsContact
+//
+// -----------------------------------------------------------------------------
+//
+TBool CCAContactEditPC::IsContact() const
+    {
+    if ( iContact )
+        {
+        return ETrue;
+        }
+
+    return EFalse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetAliasFromPresenceL
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CCAContactEditPC::GetAliasFromPresenceL( const TDesC& aWVID )
+    {
+    // add mode - contact does not exist
+    // get the alias from the network,
+    MCAPresence* presence = CAPresenceManager::InstanceL();
+
+    if ( aWVID.Length() )
+        {
+        return presence->AliasL( aWVID );
+        }
+    else
+        {
+        // write manually, WVID does not exist, thus can't get alias
+        // so use an empty alias
+        return KNullDesC().AllocL();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::DeleteCurrentContactL
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCAContactEditPC::DeleteCurrentContactL( const TDesC& aListId,
+                                              const TDesC& aOrigId )
+    {
+    // can't delete self
+    if ( iOwnData )
+        {
+        return KErrAccessDenied;
+        }
+
+    MCAStoredContacts* contacts =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+
+    MCAPresence* presence = CAPresenceManager::InstanceL();
+    MCAContactLists* listInterface = presence->ContactLists();
+
+    // delete contact
+    TRAPD( error,
+           listInterface->DeleteServerContactL( aListId, aOrigId ) );
+
+    if ( error == KErrNone )
+        {
+        iContact = NULL;
+        }
+
+    return error;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::LastContactEditOperationResultL
+//
+// -----------------------------------------------------------------------------
+//
+const RPointerArray<MCAPresenceError>& CCAContactEditPC::LastContactEditOperationResultL( void )
+    {
+    // show the detailed error codes
+    MCAPresence* presence = CAPresenceManager::InstanceL();
+    MCAContactLists* listInterface = presence->ContactLists();
+    const MCAPresenceErrors& lastResult =
+        listInterface->LastOperationResult();
+    return lastResult.DetailedErrors();
+
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetListIdLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CCAContactEditPC::GetListIdL( const TDesC& aId, TInt /*aNoListsResource*/,
+                                     TInt &aItemCount, CDesCArrayFlat*& aListIdArray,
+                                     RArray< TInt > 	&aIndexArray,
+                                     const TBool aMoveOperation /*= EFalse*/ )
+    {
+
+    //make sure that we push iIndexArray to the cleanupstack
+    CleanupClosePushL( aIndexArray );
+
+    MCAStoredContacts* contacts = CCAStorageManagerFactory::ContactListInterfaceL();
+
+    // Get list id from listquery.
+    TInt listCount = contacts->ListCount();
+
+    // Granularity has to be > 0
+    aListIdArray = new ( ELeave ) CDesCArrayFlat( Max( listCount, 1 ) );
+
+    CleanupStack::PushL( aListIdArray ) ;
+
+    if ( !aMoveOperation )
+        {
+        //In case of Add, all contact lists in which contact is not available is shown.
+
+        for ( TInt index( 0 ); index < listCount; ++index )
+            {
+            MCAContactList& contactList = contacts->ListAt( index ) ;
+            if ( !contacts->FindContact( contactList.ListId(), aId ) )
+                {
+                aListIdArray->AppendL( contactList.DisplayName() );
+                aIndexArray.AppendL( index );
+                }
+            }
+        }
+    else
+        {
+        /* In case of Move, all contact lists, except the current list, are shown in the list
+        in same order as in IM contact list.
+        */
+        for ( TInt index( 0 ); index < listCount; ++index )
+            {
+            MCAContactList& contactList = contacts->ListAt( index ) ;
+            TPtrC listid = contactList.ListId();
+
+            //check whether its the current contact list
+            if ( !CAUtils::NeutralCompare(
+                     aId,
+                     listid, EFalse ) )
+                {
+                //we have found the current list - Now add all other lists other
+                //then the current one.
+                for ( TInt jIndex( index + 1 ); jIndex < listCount; ++jIndex )
+                    {
+                    MCAContactList& contactLst = contacts->ListAt( jIndex ) ;
+                    aListIdArray->AppendL( contactLst.DisplayName() );
+                    aIndexArray.AppendL( jIndex );
+                    }
+                //all contact list has been added so break.
+                break;
+
+                }
+            else
+                {
+                //this is not the current contact list so add it to the list
+                aListIdArray->AppendL( contactList.DisplayName() );
+                aIndexArray.AppendL( index );
+                }
+            }
+        }
+
+
+    aItemCount = aIndexArray.Count() ;
+
+    if ( aItemCount == 0 )
+        {
+        CleanupStack::PopAndDestroy( 2 ); //aIndexArray,  aListIdArray
+        aListIdArray = NULL;
+        return NULL;
+        }
+    else if ( aItemCount == 1 )
+        {
+        HBufC* listId = contacts->ListAt( aIndexArray[ 0 ] ).ListId().AllocL();
+        CleanupStack::PopAndDestroy( 2 ); //aIndexArray,  aListIdArray
+        aListIdArray = NULL;
+        return listId;
+        }
+
+    CleanupStack::Pop( 2 );  //aIndexArray,  aListIdArray
+
+    return NULL;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetListIdAtIndexLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CCAContactEditPC::GetListIdAtIndexL( TInt aSelectedIndex ) const
+    {
+
+
+    MCAStoredContacts* contacts =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+    HBufC* listId = contacts->ListAt( aSelectedIndex ).ListId().AllocL();
+
+    return listId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::UpdateOwnAliasL
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCAContactEditPC::UpdateOwnAliasL( const TDesC & aAlias )
+    {
+
+    TRAPD( errAlias, iCCASettingsPC.SetSapSettingValuePCL( TEnumsPC::EOwnAlias,
+                                                           aAlias, NULL, NULL ) );
+
+    if ( !errAlias )
+        {
+        TRAPD ( err, iContact->SetAliasL( aAlias ) );
+        return err;
+        }
+
+    return errAlias;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::InitialiseL
+//
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditPC::InitialiseL( const TDesC& aWVID,
+                                    const TDesC& aListId, TBool& aOwnStatus )
+    {
+
+    //reset the member variables
+    iOwnData = EFalse;
+    iContact = NULL;
+
+    MCAStoredContacts* contacts =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+
+    MCAStoredContact* contactInList = contacts->FindContact( aListId, aWVID );
+
+    if ( contactInList )
+        {
+        iContact = contactInList;
+        // check for own status
+        if ( iContact == &contacts->OwnStatus() )
+            {
+            iOwnData = ETrue;
+            aOwnStatus = ETrue;
+            }
+        }
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetOnlineStatus
+//
+// -----------------------------------------------------------------------------
+//
+TEnumsPC::TOnlineStatus CCAContactEditPC::GetOnlineStatus() const
+    {
+
+    TEnumsPC::TOnlineStatus contactStatus = TEnumsPC::EUnknown;
+
+    switch ( iContact->OnlineStatus() )
+        {
+        case TStorageManagerGlobals::EUnknown :
+            {
+            contactStatus = TEnumsPC::EUnknown;
+            break;
+            }
+
+        case TStorageManagerGlobals::EOffline :
+            {
+            contactStatus = TEnumsPC::EOffline;
+            break;
+            }
+
+        case TStorageManagerGlobals::EOnline :
+            {
+            contactStatus = TEnumsPC::EOnline;
+            break;
+            }
+
+        case TStorageManagerGlobals::EInvisible :
+            {
+            // this can only come for own status item, no need to check since
+            // for other contacts this state is impossible
+            contactStatus = TEnumsPC::EInvisible;
+            break;
+            }
+
+        case TStorageManagerGlobals::EAway :
+            {
+            contactStatus = TEnumsPC::EAway;
+            break;
+            }
+
+        case TStorageManagerGlobals::EBusy :
+            {
+            contactStatus = TEnumsPC::EBusy;
+            break;
+            }
+        default :
+            {
+            __CHAT_ASSERT_DEBUG( EFalse );
+            break;
+            }
+        }
+
+    return contactStatus;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetClientType
+//
+// -----------------------------------------------------------------------------
+//
+TEnumsPC::TClientType CCAContactEditPC::GetClientType() const
+    {
+
+    TEnumsPC::TClientType clientType = TEnumsPC::EUnknownClient;
+
+    switch ( iContact->ClientType() )
+        {
+        case TStorageManagerGlobals::EUnknownClient :
+            {
+            clientType = TEnumsPC::EUnknownClient;
+            break;
+            }
+
+        case TStorageManagerGlobals::EMobile :
+            {
+            clientType = TEnumsPC::EMobile;
+            break;
+            }
+
+        case TStorageManagerGlobals::EPC :
+            {
+            clientType = TEnumsPC::EPC;
+            break;
+            }
+
+        default :
+            {
+            __CHAT_ASSERT_DEBUG( EFalse );
+            break;
+            }
+        }
+
+    return clientType;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetStatusText
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContactEditPC::GetStatusText() const
+    {
+    __CHAT_ASSERT_DEBUG( iContact );
+    return iContact->StatusText();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetCurrentContactIdentification
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContactEditPC::GetCurrentContactIdentification() const
+    {
+    __CHAT_ASSERT_DEBUG( iContact );
+    return iContact->Identification();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::GetCurrentContactAlias
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContactEditPC::GetCurrentContactAlias() const
+    {
+    __CHAT_ASSERT_DEBUG( iContact );
+    return iContact->Alias();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::ReleaseResources
+//
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditPC::ReleaseResources()
+    {
+    //reset the member variables
+    iOwnData = EFalse;
+    iContact = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::IsContactValidL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CCAContactEditPC::IsContactValidL( const TDesC& aListId )
+    {
+    MCAStoredContacts* contactlist =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+    MCAStoredContact* contact = NULL;
+
+    // Check for own status
+    if ( iOwnData )
+        {
+        contact = &contactlist->OwnStatus();
+        }
+    else
+        {
+        // Find contact
+        contact = contactlist->FindContact( aListId, iContact->UserId() );
+        }
+
+    if ( contact && contact != iContact )
+        {
+        // new contact pointer found for the original ID's.
+        // Let's use it and assume the old one is invalid.
+        CHAT_DP_TXT( "CCAContactEditPC::IsContactValidL: new pointer to contact!" );
+        iContact = contact;
+        }
+    return contact ? ETrue : EFalse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::IsContactValidL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CCAContactEditPC::IsOwnData() const
+    {
+    return iOwnData;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMainViewArrayPC::SetCollapsed
+// -----------------------------------------------------------------------------
+//
+TBool CCAContactEditPC::IsCollapsedL( const TDesC& aListId )
+    {
+    // this operation should be on list only..otherwise throw exception..
+    TBool isCollapsed = EFalse;
+    MCAStoredContacts* contactlist =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+    MCAContactList* contactList = contactlist->FindContactList( aListId );
+    isCollapsed =  contactList->Collapsed();
+    return isCollapsed;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditPC::DeleteContactL
+// -----------------------------------------------------------------------------
+//
+TInt CCAContactEditPC::DeleteContactL( const TDesC& aBlockedContact )
+    {
+
+    TInt errorCode( KErrNone );
+
+    // if block is in hide mode. We have to delete those items from contact lists.
+    MCAStoredContacts* contacts = CCAStorageManagerFactory::ContactListInterfaceL();
+
+
+    TInt countOfLists( contacts->ListCount() );
+    for ( TInt listCount( 0 ); listCount < countOfLists && errorCode == KErrNone; ++listCount )
+        {
+        MCAContactList& list = contacts->ListAt( listCount );
+        MCAStoredContact* contact = NULL;
+
+        contact = contacts->FindContact( list.ListId(), aBlockedContact );
+
+        if ( contact )
+            {
+            MCAPresence* presence = CAPresenceManager::InstanceL();
+            MCAContactLists* listInterface = presence->ContactLists();
+            // don't update to network directly
+            TRAP( errorCode, listInterface->DeleteServerContactL( list.ListId(),
+                                                                  contact->UserId(), EFalse ) );
+            }
+        }
+
+    // Update all changes with one operation
+    MCAPresence* presence = CAPresenceManager::InstanceL();
+    MCAContactLists* listInterface = presence->ContactLists();
+    listInterface->CommitDeleteServerContactL();
+
+    return errorCode;
+    }
+
+//    End of File