phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp
changeset 0 e686773b3f54
child 3 04ab22b956c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,738 @@
+/*
+* Copyright (c) 2005-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:  Phonebook 2 Names List UI extension plug-in.
+*
+*/
+
+
+// INCLUDE FILES
+#include "Pbk2NamesListExtensionPlugin.h"
+#include "Pbk2NamesListEx.hrh"
+#include "Pbk2NamesListExView.h"
+
+#include "CPbk2NameslistUiControlExtension.h"
+#include "CPbk2NlxOpenCcaCmd.h"
+#include "CPbk2NlxAddToTopContactsCmd.h"
+#include "CPbk2NlxRemoveFromTopContactsCmd.h"
+#include "CPbk2NlxMoveTopContactsCmd.h"
+#include "Pbk2NlxMenuFiltering.h"
+#include "cpbk2deletemycardcmd.h"
+#include "cpbk2mycard.h"
+
+#include "cpbk2openmycardcmd.h"
+#include "CVPbkContactManager.h"
+#include <spbcontentprovider.h>
+
+// Phonebook 2
+#include <MPbk2AppUi.h>
+#include <MPbk2ApplicationServices.h>
+#include <MPbk2ApplicationServices2.h>
+#include <CPbk2StoreConfiguration.h>
+#include <TVPbkContactStoreUriPtr.h>
+
+#include <MPbk2ContactUiControl.h>
+#include <MPbk2ViewExplorer.h>
+#include <CPbk2ViewState.h>
+
+#include <MPbk2ContactUiControlExtension.h>
+#include <Pbk2Commands.rsg>
+#include <MVPbkBaseContact.h>
+#include <MVPbkBaseContactFieldCollection.h>
+#include <MVPbkBaseContactField.h>
+#include <MVPbkFieldType.h>
+#include <MVPbkContactFieldData.h>
+#include <VPbkEng.rsg>
+#include <CVPbkTopContactManager.h>
+#include <VPbkContactStoreUris.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <MPbk2ContactUiControl2.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactStoreInfo.h>
+
+// Debugging headers
+
+#include <Pbk2Debug.h>
+#include <Pbk2Profile.h>
+
+//CCA
+#include <mccaconnection.h>
+#include <mccaparameter.h>
+#include <ccafactory.h>
+
+// System includes
+#include <coemain.h>
+#include <eikmenub.h>
+#include <AiwCommon.hrh>
+#include <avkon.hrh>
+#include <avkon.rsg>
+
+/// Unnamed namespace for local definitions
+namespace {
+const TInt KMinNumOfContactsToMerge = 2; // minimum number of contacts to merge
+} /// namespace
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CNamesListUIExtensionPlugin
+// --------------------------------------------------------------------------
+//
+CNamesListUIExtensionPlugin::CNamesListUIExtensionPlugin()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::~CNamesListUIExtensionPlugin
+// --------------------------------------------------------------------------
+//
+CNamesListUIExtensionPlugin::~CNamesListUIExtensionPlugin()
+    {
+    if ( iCCAConnection )
+        {
+        iCCAConnection->Close();
+        }
+    delete iContentProvider;
+    }
+
+    
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::NewL
+// --------------------------------------------------------------------------
+//
+CNamesListUIExtensionPlugin* CNamesListUIExtensionPlugin::NewL()
+    {
+    CNamesListUIExtensionPlugin* self = 
+        new ( ELeave ) CNamesListUIExtensionPlugin();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::ConstructL
+// --------------------------------------------------------------------------
+//
+void CNamesListUIExtensionPlugin::ConstructL()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::ContentProviderL
+// --------------------------------------------------------------------------
+//
+inline CSpbContentProvider& CNamesListUIExtensionPlugin::ContentProviderL()
+	{
+    if( !iContentProvider )
+        {
+        MPbk2ApplicationServices& apps = Phonebook2::Pbk2AppUi()->ApplicationServices();
+        TAny* ext = apps.MPbk2ApplicationServicesExtension( 
+            KMPbk2ApplicationServicesExtension2Uid );
+        if( !ext )
+            {
+            User::Leave( KErrNotReady );
+            }
+        CPbk2StoreManager& storeManager = 
+            static_cast<MPbk2ApplicationServices2*>(ext)->StoreManager();
+        iContentProvider = CSpbContentProvider::NewL( apps.ContactManager(), storeManager,  
+            CSpbContentProvider::EStatusMessage | CSpbContentProvider::EPhoneNumber );
+        }
+	return *iContentProvider;
+	}
+
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CreateExtensionViewL
+// --------------------------------------------------------------------------
+//
+MPbk2UIExtensionView* CNamesListUIExtensionPlugin::CreateExtensionViewL
+        ( TUid aViewId, CPbk2UIExtensionView& aView )
+    {
+    MPbk2UIExtensionView* result = NULL;
+    if ( aViewId == TUid::Uid( EPbk2NamesListViewId ) )
+        {
+        iNamesListExViewRef = CPbk2NamesListExView::NewL( 
+            aView, ContentProviderL(), iCCAConnection );
+        result = iNamesListExViewRef;    //ownership not taken
+        }
+
+    return result;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::DynInitMenuPaneL
+// --------------------------------------------------------------------------
+//
+void CNamesListUIExtensionPlugin::DynInitMenuPaneL(TInt aResourceId,
+        CEikMenuPane* aMenuPane, MPbk2ContactUiControl& aControl )
+    {
+    //This is called before CPbk2CommandHandler::PerformStandardMenuFilteringL
+    //so do not remove anything here that may be removed there.
+    
+    switch ( aResourceId )
+        {
+        case R_PHONEBOOK2_OPEN_CCA:
+            {
+            if ( !Pbk2NlxMenuFiltering::OpenReady( aControl ) )
+                {
+                DimItem( aMenuPane, EPbk2CmdOpenCca );                
+                }
+            break;
+            }
+        case R_PHONEBOOK2_SELECT_ADDFAVORITES:
+            {
+            if ( !Pbk2NlxMenuFiltering::AddToFavoritesCmdSelected( aControl ) ||
+                aControl.ContactsMarked() ) 
+                {
+                DimItem( aMenuPane, EPbk2CmdAddFavourites );
+                }
+            break;
+            }
+        case R_PHONEBOOK2_SELECT_MYCARD:
+            {
+            if ( !Pbk2NlxMenuFiltering::MyCardCmdSelected( aControl ) ||
+                aControl.ContactsMarked() ) 
+                {
+                DimItem( aMenuPane, EPbk2CmdOpenMyCard );
+                DimItem( aMenuPane, EPbk2CmdSelectMyCard );
+                }
+            else
+                {
+                if( MyCardLink() )
+                    {
+                    // MyCard exists -> show "open"
+                    DimItem( aMenuPane, EPbk2CmdSelectMyCard );
+                    }
+                else
+                    {
+                    // MyCard not created -> show "select"
+                    DimItem( aMenuPane, EPbk2CmdOpenMyCard );
+                    }
+                }
+            break;
+            }
+        case R_PHONEBOOK2_RCL_MENU:
+            {
+            if ( Pbk2NlxMenuFiltering::RclCmdSelectOptSelected( aControl )   ||
+                 Pbk2NlxMenuFiltering::AddToFavoritesCmdSelected( aControl ) ||                    
+                 aControl.ContactsMarked() ||
+                 !(iNamesListExViewRef && iNamesListExViewRef->IsRclOnL())) 
+                {
+                DimItem( aMenuPane, EPbk2CmdRcl ); 
+                }
+            break;
+            }
+        case R_PHONEBOOK2_SELECT_RCL:
+            {
+			//Promotion item (RclCmdSelectOptSelected) may only be visible if rcl feature is on
+            if ( !Pbk2NlxMenuFiltering::RclCmdSelectOptSelected( aControl )   || 
+                aControl.ContactsMarked() ) 
+                {
+                DimItem( aMenuPane, EPbk2CmdSelectRclCmdItem );
+                }
+            break;
+            }
+        case R_PHONEBOOK2_ADD_TO_TOPCONTACTS:
+            {
+            TBool dimAdd = EFalse;    
+            if ( aControl.ContactsMarked() )
+                {
+// multiple top assign/reassign doesn't work yet, enable when ready                
+#if 0                
+                dimAdd = !Pbk2NlxMenuFiltering::NonTopContactMarkedL( aControl );
+#else
+                dimAdd = ETrue;
+#endif                
+                }
+            else
+                {
+                dimAdd = !Pbk2NlxMenuFiltering::TopReadyL( aControl );
+                }
+            if ( dimAdd )    
+                {
+                DimItem( aMenuPane, EPbk2CmdAddToTopContacts );
+                }
+
+            break;
+            }
+        case R_PHONEBOOK2_REMOVE_FROM_TOPCONTACTS:
+            {
+            TBool dimRemove = EFalse;    
+            if ( aControl.ContactsMarked() )
+                {
+// multiple top assign/reassign doesn't work yet, enable when ready                
+#if 0                
+                dimRemove = !Pbk2NlxMenuFiltering::TopContactMarkedL( aControl );
+#else
+                dimRemove = ETrue;
+#endif                
+                }
+            else
+                {
+                dimRemove = !Pbk2NlxMenuFiltering::TopContactSelectedL( aControl );
+                }
+            if ( dimRemove )    
+                {
+                DimItem( aMenuPane, EPbk2CmdRemoveFromTopContacts );
+                }
+            break;
+            }
+/* Patrik 23.10.2008 Removed as agreed by ECE program management.
+        case R_PHONEBOOK2_MOVE_TOPCONTACTS:
+            {
+            if( !Pbk2NlxMenuFiltering::TopRearrangingReadyL( aControl ) || 
+                aControl.ContactsMarked() ) 
+                {
+                DimItem( aMenuPane, EPbk2CmdMoveInTopContactsList);
+                }
+            break;
+            }
+*/
+        case R_PHONEBOOK2_NAMELIST_CALL_CONTACT_MENU:
+            {
+            if ( Pbk2NlxMenuFiltering::AddToFavoritesCmdSelected( aControl ) )
+                {
+                DimItem( aMenuPane, EPbk2CmdCall );
+                }
+            if ( Pbk2NlxMenuFiltering::MyCardCmdSelected( aControl ) )
+                {
+                DimItem( aMenuPane, EPbk2CmdCall );
+                }
+            break;
+            }
+        case R_PHONEBOOK2_NAMELIST_CREATE_MESSAGE_MENU:
+            {
+            if ( !aControl.ContactsMarked() )
+                {
+                if ( Pbk2NlxMenuFiltering::AddToFavoritesCmdSelected( aControl ) )
+                    {
+                    DimItem( aMenuPane, EPbk2CmdWriteNoQuery );
+                    }
+                if ( Pbk2NlxMenuFiltering::MyCardCmdSelected( aControl ) )
+                    {
+                    DimItem( aMenuPane, EPbk2CmdWriteNoQuery );
+                    }
+                }
+            break;
+            }
+        case R_PHONEBOOK2_NAMESLIST_SEND_URL_MENU:
+            {
+            if ( Pbk2NlxMenuFiltering::AddToFavoritesCmdSelected( aControl ) )
+                {
+                DimItem( aMenuPane, EPbk2CmdSend );
+                }
+            // if mycard is not created and is selected
+			if( !MyCardLink() && Pbk2NlxMenuFiltering::MyCardCmdSelected( aControl ) )
+				{
+				DimItem( aMenuPane, EPbk2CmdSend );
+				}
+			break;
+            }
+
+#if 0                        
+        case R_PHONEBOOK2_NAMESLIST_EDIT_MENU:  
+            {                                   
+            if ( aControl.ContactsMarked() ||
+                aControl.NumberOfContacts() == 0 ||
+                addFavouritesSelected ) 
+                {
+                DimItem( aMenuPane, EPbk2CmdEditMe ); 
+                }
+            break;
+            }
+#endif            
+        case R_AVKON_MENUPANE_MARKABLE_LIST_IMPLEMENTATION:
+        	{
+        	MPbk2ContactUiControl2* tempControl = 
+        	     reinterpret_cast<MPbk2ContactUiControl2*>
+        	        (aControl.ContactUiControlExtension
+        	            (KMPbk2ContactUiControlExtension2Uid ));
+
+        	if ( tempControl->FocusedCommandItem() &&
+        		 aControl.ContactsMarked() )
+        		{
+        		DimItem( aMenuPane, EAknCmdMark );
+        		DimItem( aMenuPane, EAknMarkAll );
+        		}
+            if ( Pbk2NlxMenuFiltering::AddToFavoritesCmdSelected( aControl ) )
+                {
+                DimItem( aMenuPane, EAknCmdMark );
+                }
+            if ( Pbk2NlxMenuFiltering::MyCardCmdSelected( aControl ) )
+                {
+                DimItem( aMenuPane, EAknCmdMark );
+                }
+        	break;
+        	}
+        case R_PHONEBOOK2_MARKABLE_LIST_CONTEXT_MENU:
+            {
+            if ( Pbk2NlxMenuFiltering::AddToFavoritesCmdSelected( aControl ) )
+                {
+                DimItem( aMenuPane, EAknCmdMark );
+                DimItem( aMenuPane, EAknCmdUnmark );
+                }
+            if ( Pbk2NlxMenuFiltering::MyCardCmdSelected( aControl ) )
+                {
+                DimItem( aMenuPane, EAknCmdMark );
+                DimItem( aMenuPane, EAknCmdUnmark );
+                }
+            break;
+            }
+        case R_AVKON_MENUPANE_MARKABLE_LIST:
+            {
+            if ( !aControl.NumberOfContacts() )
+                {
+                DimItem( aMenuPane, EAknCmdEditListMenu );
+                }
+            break;
+            }
+        case R_PHONEBOOK2_NAMESLIST_COPY_MENU:
+            {
+            MPbk2ContactUiControl2* tempControl = 
+                   reinterpret_cast<MPbk2ContactUiControl2*>
+                       (aControl.ContactUiControlExtension(
+                           KMPbk2ContactUiControlExtension2Uid ));
+
+            if ( tempControl->FocusedCommandItem() &&
+                 !aControl.ContactsMarked()   )
+                {
+                DimItem( aMenuPane, EPbk2CmdCopy );
+                }
+            break;
+            }
+        case R_PHONEBOOK2_NAMESLIST_DELETE_MENU:
+            {
+            // show delete mycard if mycard command is focused / tapped and 
+            // mycard is available
+            if( !Pbk2NlxMenuFiltering::MyCardCmdSelected( aControl ) ||
+                !MyCardLink() )
+                {
+                DimItem( aMenuPane, EPbk2CmdDeleteMyCard );
+                }
+            break;
+            }
+        case R_PHONEBOOK2_MERGE_CONTACTS:
+            {
+            MVPbkContactStoreList& storeList = 
+                Phonebook2::Pbk2AppUi()->ApplicationServices().ContactManager().ContactStoresL();
+            // only phone memory contacts can be merged
+            MVPbkContactStore* store = storeList.Find( VPbkContactStoreUris::DefaultCntDbUri() );
+            TInt numberOfContacts = 0;
+            if( store )
+                {
+                MVPbkContactLink* mylink = MyCardLink();
+                numberOfContacts = store->StoreInfo().NumberOfContactsL() - ( mylink ? 1 : 0 );
+                }
+            // there must be two contacts to do merge
+            if ( numberOfContacts  < KMinNumOfContactsToMerge )
+                {
+                aMenuPane->SetItemDimmed( EPbk2CmdMergeContacts, ETrue );
+                }
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    }
+    
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::DimItem
+// --------------------------------------------------------------------------
+//
+void CNamesListUIExtensionPlugin::DimItem( CEikMenuPane* aMenuPane, TInt aCmd )
+    {
+    TInt p;  
+    
+    if ( aMenuPane->MenuItemExists( aCmd, p ) )
+        {
+        aMenuPane->SetItemDimmed( aCmd, ETrue );    
+        } 
+    }
+    
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::IsTopContact
+// --------------------------------------------------------------------------
+//
+inline TBool CNamesListUIExtensionPlugin::IsTopContact( 
+	const MVPbkBaseContact* aContact )
+    {
+    TBool topContact( EFalse );
+
+    if( aContact ) 
+        {
+        topContact = CVPbkTopContactManager::IsTopContact( *aContact );
+        }
+        
+    return topContact;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::MyCardLink
+// --------------------------------------------------------------------------
+//
+inline MVPbkContactLink* CNamesListUIExtensionPlugin::MyCardLink() const
+    {
+    MVPbkContactLink* result = NULL;
+    if( iNamesListExViewRef )
+        {
+        const CPbk2MyCard* mycard = iNamesListExViewRef->MyCard();
+        if( mycard )
+            {
+            result = mycard->MyCardLink();
+            }
+        }
+    return result;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::UpdateStorePropertiesL
+// --------------------------------------------------------------------------
+//
+void CNamesListUIExtensionPlugin::UpdateStorePropertiesL
+        ( CPbk2StorePropertyArray& /*aPropertyArray*/ )
+    {
+    // Do nothing
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CreatePbk2ContactEditorExtensionL
+// --------------------------------------------------------------------------
+//
+MPbk2ContactEditorExtension*
+    CNamesListUIExtensionPlugin::CreatePbk2ContactEditorExtensionL
+        ( CVPbkContactManager& /*aContactManager*/,
+          CPbk2PresentationContact& /*aContact*/,
+          MPbk2ContactEditorControl& /*aEditorControl*/ )
+    {
+    // Do nothing
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CreatePbk2UiControlExtensionL
+// --------------------------------------------------------------------------
+//
+MPbk2ContactUiControlExtension*
+    CNamesListUIExtensionPlugin::CreatePbk2UiControlExtensionL
+        ( CVPbkContactManager& aContactManager )
+    {
+	CPbk2MyCard* mycard = NULL;
+	if( iNamesListExViewRef )
+		{
+		mycard = iNamesListExViewRef->MyCard();
+		}
+	
+    MPbk2ContactUiControlExtension* extension = 
+        CPbk2NameslistUiControlExtension::NewL( aContactManager, ContentProviderL(), mycard );
+    return extension;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CreatePbk2SettingsViewExtensionL
+// --------------------------------------------------------------------------
+//
+MPbk2SettingsViewExtension*
+        CNamesListUIExtensionPlugin::CreatePbk2SettingsViewExtensionL()
+    {
+    // Do nothing
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CreatePbk2AppUiExtensionL
+// --------------------------------------------------------------------------
+//
+MPbk2AppUiExtension* CNamesListUIExtensionPlugin::CreatePbk2AppUiExtensionL
+        ( CVPbkContactManager& /*aContactManager*/ )
+    {
+    // Do nothing
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CreatePbk2CommandForIdL
+// --------------------------------------------------------------------------
+//
+MPbk2Command* CNamesListUIExtensionPlugin::CreatePbk2CommandForIdL
+        ( TInt aCommandId, MPbk2ContactUiControl& aUiControl ) const
+    {
+    MPbk2Command* result = NULL;
+    
+    switch( aCommandId ) 
+        {
+        case EPbk2CmdOpenCca:
+            {
+            result = CPbk2NlxOpenCcaCmd::NewL( 
+                aUiControl, 
+                const_cast<MCCAConnection*&>( iCCAConnection ) );
+            break;            
+            }
+            
+        case EPbk2CmdAddToTopContacts:
+            {
+            // Give the ETrue argument for aAddFavourites = EFalse.
+            result = CPbk2NlxAddToTopContactsCmd::NewL( aUiControl, EFalse );
+            break;
+            }
+        case EPbk2CmdAddFavourites:
+            {
+            // Give the ETrue argument for aAddFavourites = ETrue.
+            result = CPbk2NlxAddToTopContactsCmd::NewL( aUiControl, ETrue );
+            break;
+            }
+        case EPbk2CmdRemoveFromTopContacts: 
+            {
+            result = CPbk2NlxRemoveFromTopContactsCmd::NewL( aUiControl );
+            break;
+            }     
+        case EPbk2CmdMoveInTopContactsList: 
+            {
+            result = CPbk2NlxMoveTopContactsCmd::NewL( aUiControl );
+            break;
+            }
+        case EPbk2CmdOpenMyCard:    // fallthrough
+        case EPbk2CmdSelectMyCard:
+			{
+            result = CPbk2OpenMyCardCmd::NewL( 
+                const_cast<MCCAConnection*&>( iCCAConnection ),
+                &aUiControl );
+			break;
+			}
+        case EPbk2CmdDeleteMyCard:
+            {
+            MVPbkContactLink* mylink = MyCardLink();
+            if( mylink )
+                {
+                result = CPbk2DeleteMyCardCmd::NewL( aUiControl, *mylink );
+                }
+            break;
+            }
+        default:
+            break;                              
+        }
+        
+    return result;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CreatePbk2AiwInterestForIdL
+// --------------------------------------------------------------------------
+//
+MPbk2AiwInterestItem* CNamesListUIExtensionPlugin::CreatePbk2AiwInterestForIdL
+        ( TInt /*aInterestId*/,
+          CAiwServiceHandler& /*aServiceHandler*/ ) const
+    {
+    // Do nothing
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::GetHelpContextL
+// --------------------------------------------------------------------------
+//
+TBool CNamesListUIExtensionPlugin::GetHelpContextL
+        ( TCoeHelpContext& /*aContext*/,  const CPbk2AppViewBase& /*aView*/,
+          MPbk2ContactUiControl& /*aUiControl*/ )
+    {
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::ApplyDynamicViewGraphChangesL
+// --------------------------------------------------------------------------
+//
+void CNamesListUIExtensionPlugin::ApplyDynamicViewGraphChangesL(
+        CPbk2ViewGraph& /*aViewGraph*/)
+    {
+    // Do nothing
+    }
+
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::CmdOpenGroupL
+// --------------------------------------------------------------------------
+//
+void CNamesListUIExtensionPlugin::CmdOpenGroupL
+        ( MPbk2ContactUiControl& /*aUiControl*/ ) const
+    {
+    // Do nothing
+    }
+// --------------------------------------------------------------------------
+// CNamesListUIExtensionPlugin::ApplyDynamicPluginInformationDataL
+//
+// Allows extensions to add plugin information dynamically
+// during the application initialisation.
+//
+// The UI extension's start-up policy must be KPbk2LoadInStartup.
+// --------------------------------------------------------------------------
+//
+void CNamesListUIExtensionPlugin::ApplyDynamicPluginInformationDataL(
+        CPbk2UIExtensionInformation& /* aUiExtensionInformation */ )
+	{
+    // Do nothing	
+	}
+
+	MPbk2ContactEditorExtension* CNamesListUIExtensionPlugin::CreatePbk2ContactEditorExtensionL(
+            CVPbkContactManager& /*aContactManager*/,
+            MVPbkStoreContact& /*aContact*/,
+            MPbk2ContactEditorControl& /*aEditorControl*/ )
+    {
+    return NULL;
+    }                
+                      
+MPbk2SettingsViewExtension* CNamesListUIExtensionPlugin::CreatePbk2SettingsViewExtensionL(
+            CVPbkContactManager& /*aContactManager*/ )
+    {
+    return NULL;
+    }                
+MPbk2AiwInterestItem* CNamesListUIExtensionPlugin::CreatePbk2AiwInterestForIdL(
+            TInt /*aInterestId*/,
+            CAiwServiceHandler& /*aServiceHandler*/ )
+    {
+    return NULL;
+    }             	
+
+TAny* CNamesListUIExtensionPlugin::UIExtensionPluginExtension( TUid aExtensionUid )
+    {
+    TAny* ret = NULL;
+    if (aExtensionUid == ImplementationUid())
+        {
+        ret = static_cast<MPbk2PluginCommandListerner*>( this );
+        }    
+    return ret;
+    }
+
+void CNamesListUIExtensionPlugin::HandlePbk2Command( TInt aCommand )
+    {
+    switch( aCommand )
+        {
+        // If Pbk2 goes to the backgound, child applications are closed
+        case EAknCmdHideInBackground:
+            {
+            // Close CCA if it is open
+            if ( iCCAConnection )
+                {
+                iCCAConnection->Close();
+                iCCAConnection = NULL;
+                }
+            }
+            break;
+        
+        default:
+            break;
+        }
+    }            
+	
+//  End of File