phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherplugin.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherplugin.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,723 @@
+/*
+* 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 comm launcher view plugin
+*
+*/
+
+
+#include "ccappcommlauncherheaders.h"
+#include <phonebook2ece.mbg>
+
+
+#include <mccappengine.h>
+
+// Consts
+_LIT( KCCAppCommLauncherResourceFileName, "\\resource\\ccappcommlauncherpluginrsc.rsc" );
+const TInt KCCAppCommLauncherMaxOrderBufLength = 128;
+
+const TInt KSupportedMethodsArray[] = {
+    VPbkFieldTypeSelectorFactory::EVoiceCallSelector,
+    VPbkFieldTypeSelectorFactory::EVOIPCallSelector,
+    VPbkFieldTypeSelectorFactory::EUniEditorSelector,
+    VPbkFieldTypeSelectorFactory::EEmailEditorSelector,
+    VPbkFieldTypeSelectorFactory::EInstantMessagingSelector,
+    VPbkFieldTypeSelectorFactory::EURLSelector,
+    VPbkFieldTypeSelectorFactory::EVideoCallSelector,
+    VPbkFieldTypeSelectorFactory::EFindOnMapSelector
+    };
+
+const TInt KSupportedMethodsArrayLength = sizeof( KSupportedMethodsArray ) / sizeof( TInt );
+const TInt KDelayTime = 30000000; // 30s
+
+/**
+ * Panic codes for the class TCCAppCommandState
+ */
+enum TCCAppCommandStatePanicCode
+    {
+    ETCCAppCommandState_SetRunning_PreCond = 1
+    };
+
+// ---------------------------------------------------------------------------
+// Panic function for the class TCCAppCommandState
+// ---------------------------------------------------------------------------
+//
+void Panic(TCCAppCommandStatePanicCode aPanicCode)
+    {
+    _LIT( KPanicText, "TCCAppCommandState" );
+    User::Panic( KPanicText, aPanicCode );
+    }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// TCCAppCommandState::TCCAppCommandState
+// ---------------------------------------------------------------------------
+//
+TCCAppCommandState::TCCAppCommandState()
+    : iState( EFalse )
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// TCCAppCommandState::SetRunning
+// ---------------------------------------------------------------------------
+//
+void TCCAppCommandState::SetRunning()
+    {
+    // Catch all the implementation errors in release build too.
+    __ASSERT_ALWAYS( !IsRunning(), 
+            Panic( ETCCAppCommandState_SetRunning_PreCond ) );
+    iState = ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// TCCAppCommandState::SetNotRunning
+// ---------------------------------------------------------------------------
+//
+void TCCAppCommandState::SetNotRunning()
+    {
+    iState = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// TCCAppCommandState::SetRunningAndPushCleanupL
+// ---------------------------------------------------------------------------
+//
+void TCCAppCommandState::SetRunningAndPushCleanupL()
+    {
+    SetRunning();
+    PushCleanupL();
+    }
+
+// ---------------------------------------------------------------------------
+// TCCAppCommandState::SetNotRunningAndPopCleanup
+// ---------------------------------------------------------------------------
+//
+void TCCAppCommandState::SetNotRunningAndPopCleanup()
+    {
+    SetNotRunning();
+    PopCleanup();
+    }
+
+// ---------------------------------------------------------------------------
+// TCCAppCommandState::PushCleanupL
+// ---------------------------------------------------------------------------
+//
+void TCCAppCommandState::PushCleanupL()
+    {
+    CleanupStack::PushL( TCleanupItem( TCCAppCommandState::CleanupOperation, 
+            this) );
+    }
+
+// ---------------------------------------------------------------------------
+// TCCAppCommandState::PopCleanup
+// ---------------------------------------------------------------------------
+//
+void TCCAppCommandState::PopCleanup()
+    {
+    CleanupStack::Pop();
+    }
+
+// ---------------------------------------------------------------------------
+// TCCAppCommandState::CleanupOperation
+// ---------------------------------------------------------------------------
+//
+void TCCAppCommandState::CleanupOperation( TAny* aCommanState )
+    {
+    TCCAppCommandState* state = static_cast<TCCAppCommandState*>( 
+            aCommanState );
+    state->SetNotRunning();
+    }
+    
+        
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::NewL
+// ---------------------------------------------------------------------------
+//
+CCCAppCommLauncherPlugin* CCCAppCommLauncherPlugin::NewL()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherPlugin::NewL()"));
+    CCCAppCommLauncherPlugin* self = new ( ELeave ) CCCAppCommLauncherPlugin();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherPlugin::NewL()"));
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::~CCCAppCommLauncherPlugin
+// ---------------------------------------------------------------------------
+//
+CCCAppCommLauncherPlugin::~CCCAppCommLauncherPlugin()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherPlugin::~CCCAppCommLauncherPlugin()"));
+    iPreferredCommMethods.Close();
+
+    if (AppEngine())
+        {
+        AppEngine()->RemoveObserver(*this);
+        }
+
+    delete iMenuHandler;
+
+    delete iContactHandler;
+    delete iContactorService;
+    
+    
+    delete iAiwRequestTimer;
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherPlugin::~CCCAppCommLauncherPlugin()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::CCCAppCommLauncherPlugin()
+// ---------------------------------------------------------------------------
+//
+CCCAppCommLauncherPlugin::CCCAppCommLauncherPlugin() : iIsCcaForeground( ETrue ),
+        iIsTimerStart( EFalse )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherPlugin()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::ConstructL()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("ConstructL()"));
+    // ConstructL should be as light as possible.
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::PreparePluginViewL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::PreparePluginViewL(
+    MCCAppPluginParameter& /*aPluginParameter*/ )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherPlugin::PreparePluginViewL()"));
+
+    // This plugin has no usage for the aPluginParameter
+
+    if (AppEngine())
+        {
+        AppEngine()->AddObserverL(*this);
+        }
+
+    //PERFORMANCE LOGGING: 7. Preparing plugin
+    WriteToPerfLog();
+
+    PrepareViewResourcesL();
+    InitialisePreferredCommMethods();
+
+    BaseConstructL( R_COMMLAUNCHER_VIEW );
+   
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherPlugin::PreparePluginViewL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::DoActivateL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::DoActivateL(
+    const TVwsViewId& aPrevViewId,
+    TUid aCustomMessageId,
+    const TDesC8& aCustomMessage )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherPlugin::DoActivateL()"));
+
+    //PERFORMANCE LOGGING: 8. Activating view
+    WriteToPerfLog();
+
+    AppUi()->SetKeyEventFlags(
+        CAknAppUiBase::EDisableSendKeyShort |
+        CAknAppUiBase::EDisableSendKeyLong );
+    // Forward the activation-call to base-class
+    CCCAppViewPluginAknView::DoActivateL(
+        aPrevViewId, aCustomMessageId, aCustomMessage );
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("::DoActivateL() - create iContactHandler"));
+    iContactHandler = CCCAppCommLauncherContactHandler::NewL(
+        *static_cast<CCCAppCommLauncherContainer*>(iContainer),
+        *this);
+    CCA_DP(KCommLauncherLogFile, CCA_L("::DoActivateL() - request contact data"));
+
+    if (iRefetchContact)
+    	{
+        iContactHandler->RefetchContactL();
+        iRefetchContact = EFalse;
+      	}
+    else
+    	{
+        iContactHandler->RequestContactDataL();
+    	}
+
+    if (!iContactorService)
+        {
+        iContactorService = CCAContactorService::NewL();
+        }
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherPlugin::DoActivateL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::DoDeactivate
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::DoDeactivate()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherPlugin::DoDeactivate()"));
+
+    delete iContactHandler;
+    iContactHandler = NULL;
+
+    AppUi()->SetKeyEventFlags( 0 );
+    // Forward the deactivation-call to base-class
+    CCCAppViewPluginAknView::DoDeactivate();
+
+    // if plugin is showing notifications, this is good place to disable those
+    // until ActivatePluginViewL is called again
+
+    // After commlauncher view is deactivated, cancel the timer which started when requests
+    // a call services.
+    CancelTimer();
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherPlugin::DoDeactivate()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::InitialisePreferredCommMethods
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::InitialisePreferredCommMethods()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherPlugin::InitialisePreferredCommMethods()"));
+
+    TRAPD( err, LoadPreferredCommMethodsL() );
+    if ( err )
+        {// something went wrong with loading from cenrep,
+        //  use the default order
+#ifdef _DEBUG
+        CCA_DP(KCommLauncherLogFile, CCA_L("::InitialisePreferredCommMethods - Comm method variation error."));
+        CCA_DP(KCommLauncherLogFile, CCA_L("::InitialisePreferredCommMethods - err: %d"), err );
+        CEikonEnv::Static()->InfoMsg(_L("Comm method variation error. See logs."));
+#endif//_DEBUG
+        iPreferredCommMethods.Reset();
+
+        for ( TInt idx = 0; idx < KSupportedMethodsArrayLength; idx++ )
+            {
+            iPreferredCommMethods.Append(
+                (VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector)
+                KSupportedMethodsArray[ idx ]);
+            }
+        }
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherPlugin::InitialisePreferredCommMethods()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::LoadPreferredCommMethodsL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::LoadPreferredCommMethodsL()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherPlugin::LoadPreferredCommMethodsL()"));
+
+    CRepository* repository = CRepository::NewLC( KCRUidCCACommLauncher );
+    TBuf<KCCAppCommLauncherMaxOrderBufLength> orderBuf;
+    TInt error = repository->Get( KCommunicationMethodOrder, orderBuf );
+    CleanupStack::PopAndDestroy( repository );
+
+    TLex orderLex( orderBuf );
+    TPtrC numToken;
+    TLex numLex;
+    TInt commMethodType;
+    const TInt bufLength = orderBuf.Length() - 1;
+
+    while ( orderLex.Offset() < bufLength )
+        {
+        numToken.Set( orderLex.NextToken() );
+        numLex.Assign( numToken );
+        // if defined value is string instead of a number,
+        // use the default array
+        User::LeaveIfError( numLex.Val( commMethodType ));
+        CCA_DP(KCommLauncherLogFile, CCA_L("::LoadPreferredCommMethodsL - found commMethodType: %d"), commMethodType );
+        // if defined value is outside of the possible comm method
+        // values, use the default array
+        TBool knownMethod(EFalse);
+        for( TInt idx = 0; idx < KSupportedMethodsArrayLength; idx++ )
+            {
+            if( KSupportedMethodsArray[ idx ] == commMethodType )
+                {
+                knownMethod = ETrue;
+                break;
+                }
+            }
+        if(!knownMethod)
+            {
+            CCA_DP(KCommLauncherLogFile, CCA_L("::LoadPreferredCommMethodsL - skippin unsupported method(s): %d"),
+                    commMethodType );
+            User::Leave( KErrArgument );
+            }
+
+        iPreferredCommMethods.Append(
+            VPbkFieldTypeSelectorFactory::CreateActionTypeSelectorIdL(
+                commMethodType ) );
+        }
+
+    // if no comm methods defined, use the default array
+    User::LeaveIfError( iPreferredCommMethods.Count() ? 0 : KErrNotFound );
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherPlugin::LoadPreferredCommMethodsL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::ProvideBitmapL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::ProvideBitmapL(
+    TCCAppIconType aIconType,
+    CAknIcon& aIcon )
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("->CCCAppCommLauncherPlugin::ProvideBitmapL()"));
+
+    if ( ECCAppTabIcon == aIconType )
+        {
+        CFbsBitmap* bmp = NULL;
+        CFbsBitmap* bmpMask = NULL;
+
+        AknsUtils::CreateIconL(
+            AknsUtils::SkinInstance(),
+            KAknsIIDQgnPropPbCommTab3,
+            bmp,
+            bmpMask,
+            KPbk2ECEIconFileName,
+            EMbmPhonebook2eceQgn_prop_pb_comm_tab3,
+            EMbmPhonebook2eceQgn_prop_pb_comm_tab3_mask );
+
+        aIcon.SetBitmap( bmp );
+        aIcon.SetMask( bmpMask );
+        }
+
+    CCA_DP(KCommLauncherLogFile, CCA_L("<-CCCAppCommLauncherPlugin::ProvideBitmapL()"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::CCCAppViewPluginBaseExtension
+// ---------------------------------------------------------------------------
+//
+TAny* CCCAppCommLauncherPlugin::CCCAppViewPluginBaseExtension( TUid aExtensionUid )
+    {
+    if ( aExtensionUid == KMCCAppViewPluginBaseExtension2Uid )
+        {
+        return static_cast<MCCAppViewPluginBase2*>( this );
+        }
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::DynInitMenuPaneL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::DynInitMenuPaneL(
+    TInt aResourceId,
+    CEikMenuPane* aMenuPane )
+    {
+    EnsureMenuHandlerCreatedL();
+    iMenuHandler->DynInitMenuPaneL( aResourceId, aMenuPane );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::EnsureMenuHandlerCreatedL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::EnsureMenuHandlerCreatedL()
+    {
+    if ( !iMenuHandler )
+        {
+        iMenuHandler = CCCAppCommLauncherMenuHandler::NewL( *this );
+        iMenuHandler->SetContactStore( iContactHandler->ContactStore() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::CloseCCApp
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::CloseCCApp()
+    {
+    // Cancel timer after timer triggered to make sure the same timer just be 
+    // triggered once.
+    CancelTimer();
+    
+    // If CCA is at background, close CCA application.
+    if ( !iIsCcaForeground )
+        {
+        RWsSession& wsSession = CCoeEnv::Static()->WsSession();
+
+        TApaTask ccapp( wsSession );
+        TInt wgId = CCoeEnv::Static()->RootWin().WindowGroupId();
+        ccapp.SetWgId( wgId );
+        ccapp.EndTask();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherContainer::ContactorService
+// ---------------------------------------------------------------------------
+//
+const CCAContactorService* CCCAppCommLauncherPlugin::ContactorService()
+    {
+    return iContactorService;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::ExecuteServiceL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::ExecuteServiceL(
+        const CCAContactorService::TCSParameter& aParameter)
+    {
+    if (iContactorService)
+        {
+        iCommandState.SetRunningAndPushCleanupL();
+        iContactorService->ExecuteServiceL( aParameter );
+        iCommandState.SetNotRunningAndPopCleanup();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::StartTimerL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::StartTimerL()
+    {
+    if ( !iAiwRequestTimer )
+        {
+        iAiwRequestTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+        }
+    
+    // Cancel the timer before start it to make sure formal timer can be canceled
+    // when start a new timer.
+    CancelTimer();
+    
+    TCallBack callback( ServiceTimeOutL, this );
+    iAiwRequestTimer->Start( KDelayTime, KDelayTime, callback );
+    
+    iIsTimerStart = ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::CancelTimer
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::CancelTimer()
+    {
+    if ( iAiwRequestTimer && iIsTimerStart )
+        {
+        iAiwRequestTimer->Cancel();
+        iIsTimerStart = EFalse;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::IsTopContactL
+// ---------------------------------------------------------------------------
+//
+TBool CCCAppCommLauncherPlugin::IsTopContactL()
+    {
+    return iContactHandler->IsTopContact();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::IsContactL
+// ---------------------------------------------------------------------------
+//
+TBool CCCAppCommLauncherPlugin::IsContactL()
+    {
+    return ETrue;//todo
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::HandleCommandL( TInt aCommand )
+    {
+    if ( !iCommandState.IsRunning() )
+        {
+        // Make sure the aiw request timer is canceled before executing 
+        // another command.
+        CancelTimer();
+        
+        // Forward the command handling 1st to base-class.
+        // The "Exit"- and "Back"-commands are handled there.
+        CCCAppViewPluginAknView::HandleCommandL( aCommand );
+    
+        // Rest to menuhandler
+        EnsureMenuHandlerCreatedL();
+        iMenuHandler->HandleCommandL( aCommand );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::PreferredCommMethods
+// ---------------------------------------------------------------------------
+//
+RArray<VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector>&
+    CCCAppCommLauncherPlugin::PreferredCommMethods()
+    {
+    CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherPlugin::PreferredCommMethods()"));
+    return iPreferredCommMethods;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::ErrorNotifierL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::ErrorNotifierL(
+    TCCAppCommLauncherPluginErrorSource aErrorSource,
+    TInt aError )
+    {
+    // possibility to handle the error cases
+    CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherPlugin::ErrorNotifierL() called"));
+    CCA_DP(KCommLauncherLogFile, CCA_L("::ErrorNotifierL aError: %d"), aError );
+    CCA_DP(KCommLauncherLogFile, CCA_L("::ErrorNotifierL aErrorSource: %d"), (TInt)aErrorSource );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::Container
+// ---------------------------------------------------------------------------
+//
+CCCAppCommLauncherContainer& CCCAppCommLauncherPlugin::Container()
+    {
+    return *static_cast<CCCAppCommLauncherContainer*>(iContainer);
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::ContactHandler
+// ---------------------------------------------------------------------------
+//
+CCCAppCommLauncherContactHandler& CCCAppCommLauncherPlugin::ContactHandler()
+    {
+    return *iContactHandler;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::NewContainerL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::NewContainerL()
+    {
+    iContainer = new (ELeave) CCCAppCommLauncherContainer( *this );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::PluginBusy()
+// ---------------------------------------------------------------------------
+//
+TBool CCCAppCommLauncherPlugin::PluginBusy()
+    {
+    TBool ret = EFalse;
+    
+    if ( iContactorService != NULL )
+       {
+       ret = iContactorService->IsBusy();
+       }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::HandleForegroundEventL()
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::HandleForegroundEventL( TBool aForeground )
+    {
+    iIsCcaForeground = aForeground;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::Id
+// ---------------------------------------------------------------------------
+//
+TUid CCCAppCommLauncherPlugin::Id()const
+    {
+    return TUid::Uid( KCCACommLauncherPluginImplmentationUid );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::PrepareViewResourcesL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::PrepareViewResourcesL()
+    {
+    // preparing resources for use
+    TFileName fileName( KCCAppCommLauncherResourceFileName );
+    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+    iResourceLoader.OpenL( fileName );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::SetTitleL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::SetTitleL( const TDesC& aTitle )
+    {
+    // Forward the SetTitleL-call to base-class
+    CCCAppViewPluginAknView::SetTitleL( aTitle );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::NotifyPluginOfContactChangeL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::NotifyPluginOfContactEventL()
+    {
+    iRefetchContact = ETrue;
+    }
+
+// --------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::UpdateMSKinCbaL
+// Sets CBA with empty MSK or MSK with text "Select" when contact has
+// communication methods available.
+// --------------------------------------------------------------------------
+//
+void CCCAppCommLauncherPlugin::UpdateMSKinCbaL( TBool aCommMethodsAvailable )
+{
+    CEikButtonGroupContainer* cba = Cba();
+
+    if ( cba )
+        {
+        cba->SetCommandSetL(aCommMethodsAvailable
+            ? R_AVKON_SOFTKEYS_OPTIONS_BACK__SELECT
+            : R_CCACOMMLAUNCHER_SOFTKEYS_OPTIONS_BACK_EMPTY);
+
+        cba->DrawDeferred();
+        }
+}
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherPlugin::ServiceTimeOutL
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppCommLauncherPlugin::ServiceTimeOutL( TAny* aObject )
+    {
+    CCCAppCommLauncherPlugin* self = static_cast<CCCAppCommLauncherPlugin*> (aObject);
+    self->CloseCCApp();
+    return 0;
+    }
+
+// End of File