srsf/vcexecutorapp/src/appcontroller.cpp
changeset 13 57b735022c18
parent 1 b13cd05eeb2f
--- a/srsf/vcexecutorapp/src/appcontroller.cpp	Mon Jan 18 20:20:30 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,963 +0,0 @@
-/*
-* 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:  This is an implementation class for checking which 
-*               application or profile needs to be activated and then
-*               starts it.
-*
-*/
-
-
-// INCLUDE FILES
-#include "appcontroller.h"
-#include <vcexecutorapp.rsg>
-#include "appcontroller.hrh"
-#include "appcontrollerconstants.h"
-#include <aknlists.h>
-#include <aknPopup.h>
-#include <apgtask.h>     //TApaTask, TApaTaskList
-#include <apacmdln.h>    //CApaCommandLine
-#include <w32std.h>      // RWsSession
-#include <e32svr.h>
-#include <StringLoader.h>
-#include <f32file.h>
-#include <badesca.h> 
-#include <bautils.h>
-#include <barsc.h>
-#include <e32def.h>
-
-#include <PSVariables.h>
-#include "appcontrollerpropertyhandler.h"
-#include <ctsydomainpskeys.h>
-
-#include <startupdomainpskeys.h>
-
-#include <centralrepository.h>
-
-
-#include <CoreApplicationUIsSDKCRKeys.h>
-
-#include <aknnotewrappers.h>
-#include <featmgr.h>
-#include <bldvariant.hrh>
-#include <AknQueryDialog.h>
-
-#include <sendui.h>     //CreateAndSendMessageL()
-#include <TSendingCapabilities.h>
-#include <SendUiConsts.h>
-
-#include <MsgArrays.h>
-
-#include <coemain.h>
-
-// Profile Engine API
-#include <Profile.hrh>
-
-#include <AknNotifierController.h>
-#include <AknGlobalConfirmationQuery.h> // Confirmation query.
-#include "appcontrolleractiveobject.h"  // CAppControllerActiveObject.
-#include <AknGlobalNote.h>    // Information note
-#include <data_caging_path_literals.hrh> // KDC_RESOURCE_FILES_DIR
-
-#include "rubydebug.h"
-
-
-#include <aiwdialdata.h>
-#include <AiwDialDataTypes.h>
-#include <AiwServiceHandler.h>
-#include <GSLauncher.h>
-
-
-// Cover UI start
-#include "secondarydisplay/appcontrollersecondarydisplayapi.h"
-#include "SecondaryDisplay/SecondaryDisplaySysApAPI.h"
-// Cover UI end
-
-const TUid KAppManagerUid = { 0x10283321 }; // Control Panel Application Manager UID
-const TUid KVoiceCommandUid = { 0x10282C40 }; // Control Panel Voice Command UID
-
-// ================= MEMBER FUNCTIONS =======================
-
-// C++ default constructor can NOT contain any code, that
-// might leave.
-//
-CVCApplicationControllerImpl::CVCApplicationControllerImpl() : iResourceFileOffset( 0 )
-    {
-    }
-
-// Destructor
-CVCApplicationControllerImpl::~CVCApplicationControllerImpl()
-    {
-    if( iApaLsSession )
-        {
-        iApaLsSession->Close();
-        delete iApaLsSession;
-        }
- 
-
-    delete iPropertyHandler;
-    delete iMsgTypes;
-    
-    if (iSendUi)
-        {
-        delete iSendUi;    
-        }
-        
-    // Delete active object.
-    if ( iActiveObject )
-        {
-        iActiveObject->Cancel();
-        delete iActiveObject;
-        }
-
-    if (iProfileEngine)
-        {
-        iProfileEngine->Release();
-        iProfileEngine = NULL;
-        }
-
-    delete iGlobalConfQuery;
-    
-    delete iQueryDialog;
-    
-    if ( iCoeEnv && iEikonEnv->EikAppUi() )
-        {
-        iEikonEnv->EikAppUi()->RemoveFromStack( this );
-        }
-    
-    FeatureManager::UnInitializeLib();
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::ConstructL
-// Symbian 2nd phase constructor
-// ---------------------------------------------------------
-//
-void CVCApplicationControllerImpl::ConstructL()
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::ConstructL" );
-    
-    // Sets up TLS, must be done before FeatureManager is used.
-    FeatureManager::InitializeLibL();
-
-    iPropertyHandler = CAppControllerPropertyHandler::NewL(
-        KPSUidCtsyCallInformation, KCTsyCallState, this);
-
-    // Create active object to handle note request statuses.
-    iActiveObject = new (ELeave) CAppControllerActiveObject( *this );
-
-    iGlobalConfQuery = CAknGlobalConfirmationQuery::NewL();
-    }
-
-// ----------------------------------------------------------------
-// CVCApplicationControllerImpl* CVCApplicationControllerImpl::NewL
-// Two-phased constructor.
-// ----------------------------------------------------------------
-//
-CVCApplicationControllerImpl* CVCApplicationControllerImpl::NewL()                                                           
-    {
-    CVCApplicationControllerImpl* self= new (ELeave) CVCApplicationControllerImpl();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop();
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::ExecuteCommandL
-// Checks the Id and diverts the application or profile
-// to the right launching engine.
-// ---------------------------------------------------------
-//
-TInt CVCApplicationControllerImpl::ExecuteCommandL( TUint aCommandId,
-                                                    const TDesC& /*aParameters*/ )
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::ExecuteCommandL" );
-    
-    TInt err = KErrNone;
-
-    // The method we're about to launch is an application, recognized by it's first name.
-    if( aCommandId < KFirstProfileValue )
-        {
-        err = DoExecuteCommandL( aCommandId, KNullDesC() );
-        }
-    // The method we're about to launch is a profile, recognized by it's first name
-    else if( ( aCommandId >= KFirstProfileValue) && ( aCommandId < KSecondProfileValue) )
-        {
-        aCommandId -= KProfileValue;
-        ProfileEngL( aCommandId );
-        }
-    // The method we're about to launch is a profile, recognized by it's second name
-    else if ( ( aCommandId >= KSecondProfileValue ) )
-        {
-        aCommandId -= KFirstProfileValue;
-        ProfileEngL( aCommandId );
-        }
-    else
-        {
-        // Id does not match.
-        RUBY_DEBUG1( "CVCApplicationControllerImpl::ExecuteCommandL: command id %d not found", aCommandId );
-        User::Leave( KErrArgument );
-        }
-
-    return err;
-    }
-    
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::DoExecuteCommandL
-// Checks the Id and diverts the application or profile
-// to the right launching engine.
-// ---------------------------------------------------------
-//
-TInt CVCApplicationControllerImpl::DoExecuteCommandL( TUint aCommandId, const TDesC& /*aParameters*/ )
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::DoExecuteCommandL" );
-     
-    RUBY_DEBUG1( "CVCApplicationControllerImpl::DoExecuteCommandL. executing command with id %d", aCommandId );
-
-    iCallStatus = EFalse;
-    TInt err = KErrNone;
-    CGSLauncher* gsLauncher( NULL );
-    TUid zeroUid = {0};
-    // Check which app needs to be activated
-    switch( aCommandId )
-        {
-        case EAppVoiceMail:
-
-            err = VmbxEngL();
-            break;
-#ifdef __BT
-        case EAppBluetooth:
-            
-            err = BTEngL();
-            break;
-#endif
-        case EAppWriteMessage:
-    
-            ActivateMessageL( EEditorTypeNewMessage );
-            break;
-            
-        case EAppWriteEmail:
-
-            ActivateMessageL( EEditorTypeNewEmail );
-            break;
-            
-        case EAppWritePostcard:
-       
-            ActivateMessageL( EEditorTypePostcard );
-            break;
-        
-        case EAppApplicationManagerCPView:
-            gsLauncher = CGSLauncher::NewLC();
-            gsLauncher->LaunchGSViewL( KAppManagerUid, zeroUid, KNullDesC8 );
-            CleanupStack::PopAndDestroy( gsLauncher );
-            break;
-            
-        case EAppVoiceCommandCPView:
-            gsLauncher = CGSLauncher::NewLC();
-            gsLauncher->LaunchGSViewL( KVoiceCommandUid, zeroUid, KNullDesC8 );
-            CleanupStack::PopAndDestroy( gsLauncher );
-            break;
-            
-        default:
-            err = KErrNotSupported;
-            break;
-        }
-
-        // Check if it's profile
-    if ( err == KErrNotSupported && aCommandId >= KProfileIdsStart )
-        {
-        ProfileEngL( aCommandId );
-        }
-
-    return err;
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::ProfileEngL
-// Check which profile user wants to activate and do it.
-// ---------------------------------------------------------
-//
-void CVCApplicationControllerImpl::ProfileEngL( TUint aCommandId )
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::ProfileEngL" );
-
-    // cut the VAS DB value from aCommandId so we can activate the profile.
-    iProfileId = 0;
-    iProfileId = aCommandId -= KProfileValue;
-        
-    RUBY_DEBUG1( "CVCApplicationControllerImpl::ProfileEngL: Trying to activate profile id: %d", iProfileId );
-    
-    // Create profile engine
-    iProfileEngine = CreateProfileEngineL();
-    
-        // If Off-line profile is supported
-    if( ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) ) &&
-        // and active profile is Off-line
-        ( iProfileEngine->ActiveProfileId() == EProfileOffLineId ) &&
-        // and currently focused profile is not Off-line
-        ( iProfileId != EProfileOffLineId ) )
-        {
-        // We are changing from Off-line to a normal profile.
-        // Check if SIM card exists or not
-        TInt simCStatus( ESimNotPresent );
-
-        RProperty simStatus;
-        User::LeaveIfError(
-        simStatus.Attach( KPSUidStartup, KPSSimStatus ) );
-        User::LeaveIfError( simStatus.Get( simCStatus ) );
-        simStatus.Close();
-
-        if( simCStatus == ESimNotPresent )
-            {
-            // SIM card does not exist.
-            // Show an information note and exit from method.
-            HBufC* infoText = StringLoader::LoadLC( R_TEXT_INSERT_SIM );
-            CAknInformationNote* note =
-                new( ELeave ) CAknInformationNote( ETrue );
-// Cover UI start
-            if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
-                {
-                // Initializes cover support
-                note->PublishDialogL( SecondaryDisplay::ECmdShowInsertSimNote,
-                                      SecondaryDisplay::KCatSysAp );
-                }
-// Cover UI end
-
-            note->ExecuteLD( *infoText );
-            CleanupStack::PopAndDestroy( infoText );
-            return;
-            }
-        else
-            {
-            iState = EQueryDialog;
-
-            if ( iCoeEnv && iEikonEnv->EikAppUi() )
-                {
-                iEikonEnv->EikAppUi()->AddToStackL( this, ECoeStackPriorityAlert );
-                }
-                        
-            iQueryDialog = CAknQueryDialog::NewL();
-// Cover UI start
-            if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
-                {
-                // Initializes cover support
-                iQueryDialog->PublishDialogL(
-                    SecondaryDisplay::ECmdShowLeaveOfflineProfileQuery,
-                    SecondaryDisplay::KCatAppController );
-                }
-// Cover UI end
-            
-            TInt result = iQueryDialog->ExecuteLD( R_LEAVE_OFFLINE_PROFILE_CONFIRMATION_QUERY );
-            
-            iQueryDialog = NULL;            
-            if ( iCoeEnv && iEikonEnv->EikAppUi() )
-                {
-                iEikonEnv->EikAppUi()->RemoveFromStack( this );
-                }
-
-            if ( !result )
-                {
-                // SIM card exists.
-                // User replied that he/she doesn't want to activate RF.
-                // Exit from method, do not activate the selected profile.
-        
-                return;                
-                } 
-            }
-        }
-    iProfileEngine->SetActiveProfileL( iProfileId );
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::VmbxEngL()
-// Get the Voice mailbox number and make the call.
-// ---------------------------------------------------------
-//
-TInt CVCApplicationControllerImpl::VmbxEngL()
-    {
-    RUBY_DEBUG_BLOCK( "CVCApplicationControllerImpl::VmbxEngL" );
-    
-    iState = EVoiceMail;
-
-    TBuf<KVmbxMaxNumberLength> iNumber;
-
-
-    // existing ETel connection should be used in Open() where available
-    User::LeaveIfError( iVmbx.Open() );  
-
-    // Get vmbx number, active ALS line used as default
-    TInt err = iVmbx.GetVmbxNumber( iNumber );
-    
-
-    if( err != KErrNone && err != KErrNotFound )
-        {
-        User::Leave( err );
-        }
-
-    // If not found, query the user to enter it
-    if (err == KErrNotFound)
-        {
-        RUBY_DEBUG0( "Querying voice mailbox number" );
-        if ( iVmbx.QueryNumberL(EVmbxNotDefinedQuery, iNumber) )
-            {
-            if( iNumber.Length() )
-                {
-                RUBY_DEBUG0( "CVCApplicationControllerImpl::VmbxEngL: calling voice mailbox number" );
-                DialVmbxL( iNumber );
-                }
-            else
-                {
-                // User entered incorrect number of nothing
-                // This is handled by the vmbx engine.
-                }   
-            }
-        else
-            {
-            // User pressed cancel
-            }
-        }
-    // vmbx number was found so just make the call.
-    else if (!err && iNumber.Length())
-        {
-        RUBY_DEBUG0( "CVCApplicationControllerImpl::VmbxEngL: calling voice mailbox number" );
-        DialVmbxL( iNumber );
-        }
-        
-    iVmbx.Close();
-
-    return err;
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::DialVmbxL
-// Does the call to voice mailbox number
-// ---------------------------------------------------------
-//
-void CVCApplicationControllerImpl::DialVmbxL( const TDesC& aNumber )
-    {
-
-    CAiwServiceHandler* serviceHandler = CAiwServiceHandler::NewLC();
-
-    // Create AIW interest
-    RCriteriaArray interest;
-    CleanupClosePushL( interest );      // cleanup stack 2
-    CAiwCriteriaItem* criteria = CAiwCriteriaItem::NewLC( 
-                                        KAiwCmdCall, KAiwCmdCall,
-                                        _L8( "*" ) );  // cleanup stack 3
-    TUid base;
-    base.iUid = KAiwClassBase;
-    criteria->SetServiceClass( base );
-    User::LeaveIfError( interest.Append( criteria ) );
-     
-    // attach to AIW interest
-    serviceHandler->AttachL( interest );
-        
-    CAiwDialData* dialData = CAiwDialData::NewLC();   
-    dialData->SetPhoneNumberL( aNumber );
-           
-    dialData->SetCallType( CAiwDialData::EAIWForcedCS );
-    
-    CAiwGenericParamList& paramList = serviceHandler->InParamListL();
-    dialData->FillInParamListL(paramList);
-
-    serviceHandler->ExecuteServiceCmdL( KAiwCmdCall,
-                                        paramList,
-                                        serviceHandler->OutParamListL(),
-                                        0,
-                                        this );
-                                        
-    iWait.Start();
-                                        
-    CleanupStack::PopAndDestroy( dialData );
-    CleanupStack::PopAndDestroy( criteria ); 
-    CleanupStack::PopAndDestroy( &interest );
-    CleanupStack::PopAndDestroy( serviceHandler );
-
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::BTEngL()
-// Check if BT is on/off and change it.
-// ---------------------------------------------------------
-//
-#ifdef __BT
-TInt CVCApplicationControllerImpl::BTEngL()
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::BTEngL" );
-    
-    TInt err = KErrNone;
-
-    TBTPowerStateValue powerState = EBTPowerOff;
-    CBTEngSettings* mcm = CBTEngSettings::NewLC(NULL); // No callbacks from this environment
-    
-    // Getter for BT MCM power mode
-    // returns power mode via powerState reference
-    err = mcm->GetPowerState(  powerState );
-
-    if( ( powerState == EBTPowerOff ) && ( !err ) ) // Power is OFF
-        {
-        TInt offlineModeOff( 0 );    // possible values are 0 and 1
-        TInt activationEnabled( 0 ); // possible values are 0 and 1
-
-        // Check whether local Bluetooth name is defined
-        TBuf<KBTMaxNameLength> btName;
-        mcm->GetLocalName( btName );
-        if ( btName.Length() <= 0 )
-            {
-            // Activate Bluetooth UI
-            ActivateAppL( KUidAppBtUi );
-            }
-        else
-            {
-            // Checks whether off-line mode is on and whether Bluetooth can be
-            // activated in off-line mode
-            GetOfflineModeFlagsL( offlineModeOff, activationEnabled );
-
-            if ( !offlineModeOff )
-                {
-                // Choose user interaction
-                if ( activationEnabled )
-                    {
-                    iState = EQueryDialog;
-    
-                    if ( iCoeEnv && iEikonEnv->EikAppUi() )
-                        {
-                        iEikonEnv->EikAppUi()->AddToStackL( this, ECoeStackPriorityAlert );
-                        }
-
-                    // Create and show query
-                    //
-                    iQueryDialog = CAknQueryDialog::NewL(CAknQueryDialog::ENoTone);
-// Cover UI start
-                    if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
-            		    {
-                        // Initializes cover support
-                        iQueryDialog->PublishDialogL( 
-                            SecondaryDisplay::ECmdShowOfflineBtActivationQuery,
-                	    	SecondaryDisplay::KCatAppController );
-                        }
-// Cover UI end
-                    TInt result = iQueryDialog->ExecuteLD(R_BT_ACTIVATE_IN_OFFLINE_QUERY);
-                    
-                    iQueryDialog = NULL;                    
-                    if ( iCoeEnv && iEikonEnv->EikAppUi() )
-                        {
-                        iEikonEnv->EikAppUi()->RemoveFromStack( this );
-                        }
-                    
-                    if ( result )
-                        {
-                        err = mcm->SetPowerState( EBTPowerOn );  // Set power on
-                        }
-                    }
-                else
-                    {
-                    HBufC* stringHolder = StringLoader::LoadLC( R_BT_OFFLINE_DISABLED );
-                    CAknInformationNote* note = new (ELeave) CAknInformationNote();
-// Cover UI start
-                    if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
-                        {
-                        // Initializes cover support
-                        note->PublishDialogL( SecondaryDisplay::ECmdShowBtDisabledOfflineNote,
-                                              SecondaryDisplay::KCatAppController );
-                        }
-// Cover UI end
-
-                    note->ExecuteLD( *stringHolder );
-                    CleanupStack::PopAndDestroy(); //stringHolder
-                    }
-                }
-            else
-                {
-                // Offline mode is off
-                //
-                if ( activationEnabled )
-                    {
-                    err = mcm->SetPowerState( EBTPowerOn );  // Set power on
-                    }
-                }
-            }
-        }
-    else if(( powerState == EBTPowerOn ) && ( !err ))     // Power is ON
-        {
-        err = mcm->SetPowerState( EBTPowerOff ); // Set power off
-        }
-          
-    CleanupStack::PopAndDestroy( mcm );
-
-    if ( err != KErrNone )
-        {
-        HBufC* text = StringLoader::LoadLC(R_BT_GENERAL_ERROR);
-        CAknErrorNote* dlg = new (ELeave) CAknErrorNote(ETrue);
-// Cover UI start
-        if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
-            {
-            // Initializes cover support
-            dlg->PublishDialogL( SecondaryDisplay::ECmdShowBtGeneralErrorNote,
-                                 SecondaryDisplay::KCatAppController );
-            }
-// Cover UI end
-
-        dlg->ExecuteLD(*text);
-        CleanupStack::PopAndDestroy(); // text
-        }
-    return err;
-    }
-
-#endif // __BT
-
-// ----------------------------------------------------------
-// CVCApplicationControllerImpl::GetOfflineModeFlagsL
-// ----------------------------------------------------------
-//
-void CVCApplicationControllerImpl::GetOfflineModeFlagsL( TInt& aOfflineModeOff, 
-                                                    TInt& aBTActivationEnabled ) const
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::GetOfflineModeFlagsL" );
-    
-    // Connecting and initialization:
-    CRepository* repository = CRepository::NewL(KCRUidCoreApplicationUIs);
-    
-    // Offline mode on?
-    repository->Get( KCoreAppUIsNetworkConnectionAllowed, aOfflineModeOff );
-    
-    RUBY_DEBUG1( "CVCApplicationControllerImpl::GetOfflineModeFlagsL: offline status %d", aOfflineModeOff );
-    
-    // Closing connection:
-    delete repository;
-    
-    // BT Activation enabled?
-    
-    CRepository* repository2 = CRepository::NewL( KCRUidBluetoothEngine );
-  
-    repository2->Get(KBTEnabledInOffline, aBTActivationEnabled);
-
-    RUBY_DEBUG1( "CVCApplicationControllerImpl::GetOfflineModeFlagsL: activation allowed %d", aBTActivationEnabled );
-    
-    // Closing connection:
-    delete repository2;
-    }
-
-// ----------------------------------------------------------
-// CVCApplicationControllerImpl::GetSimcardMode
-// ----------------------------------------------------------
-//
-void CVCApplicationControllerImpl::GetSIMCardMode( TInt& aSIMCardMode ) const                               
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::GetSIMCardMode" );
-
-        // We are changing from Off-line to a normal profile.
-        // Check if SIM card exists or not
-        aSIMCardMode = ESimNotPresent;
-
-        RProperty simStatus;
-        simStatus.Attach( KPSUidStartup, KPSSimStatus );
-        simStatus.Get( aSIMCardMode );
-        simStatus.Close();
-        }
-
-// ---------------------------------------------------------------------------
-// CVCApplicationControllerImpl::ActivateMessageL
-// ---------------------------------------------------------------------------
-TInt CVCApplicationControllerImpl::ActivateMessageL(TEditorType aType)
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::ActivateMessageL" );
-    
-    TInt err = KErrNone;
-    TUid mtmType = KNullUid;
-
-    switch( aType )
-        {
-        case EEditorTypeNewMessage:            
-            mtmType.iUid = KSenduiMtmUniMessageUidValue ;
-            break;
-        case EEditorTypeNewEmail:            
-            mtmType.iUid = KSenduiMtmSmtpUidValue;
-            break;
-        case EEditorTypePostcard:
-            mtmType.iUid = KSenduiMtmPostcardUidValue;
-            break;
-        default:
-            err = KErrNotFound;
-            break;
-        }
-    if (!err)
-        {
-        MHandlesSendAppUi().CreateAndSendMessageL( mtmType, 
-                                                   NULL,
-                                                   KNullUid,
-                                                   EFalse );
-        }
-    return err;
-    }
-    
-// ---------------------------------------------------------------------------
-// CVCApplicationControllerImpl::MHandlesSendAppUi()
-// Returns send ui instance.
-// ---------------------------------------------------------------------------
-CSendUi& CVCApplicationControllerImpl::MHandlesSendAppUi()
-    {
-    if ( !iSendUi )
-        {
-        TRAPD( error, iSendUi = CSendUi::NewL() );
-        if ( error != KErrNone )
-            {
-            iSendUi = NULL;    
-            }
-        }
-    return *iSendUi;
-    }
-
-// ----------------------------------------------------
-// CVCApplicationControllerImpl::HandleCurrentCallStatusChange
-// Handle call status change event.
-// ----------------------------------------------------
-//
-void CVCApplicationControllerImpl::HandleCurrentCallStatusChange()
-    {
-    switch( iPropertyHandler->Value() )
-        {
-        case EPSCTsyCallStateNone:
-        case EPSCTsyCallStateAlerting:
-        case EPSCTsyCallStateRinging:
-            {
-            switch (iState)
-                {
-                case EVoiceMail:
-                    {
-                    iCallStatus = ETrue;
-                    // Cancel the menu
-                    iVmbx.Close();
-                    
-                    break;
-                    }
-                case ENewMessage:
-                    {                  
-                    iCallStatus = ETrue;
-                    // Cancel the menu
-                    Cancel();
-                    if (iCoeEnv && iEikonEnv->EikAppUi())
-                        {
-                        iEikonEnv->EikAppUi()->RemoveFromStack(this);
-                        }
-                    break;
-                    }
-                case EQueryDialog:
-                    {
-                    iCallStatus = ETrue;
-                    
-                    DismissQueryDialog();
-                        
-                    break;
-                    }
-                default:
-                    // Pass
-                    break;
-                }
-            break;
-            }
-
-        default:
-            {
-            // pass
-            break;
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::Cancel
-// ---------------------------------------------------------
-//
-void CVCApplicationControllerImpl::Cancel()
-    {
-    // Cancel the menu
-    if ( iPopupList )
-        {
-        iPopupList->CancelPopup();
-        iPopupList = NULL;
-        }
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::OfferKeyEventL
-// ---------------------------------------------------------
-//
-TKeyResponse CVCApplicationControllerImpl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::OfferKeyEventL" );
-    
-    TKeyResponse keyEvent( EKeyWasNotConsumed );
-    
-    if ( aType == EEventKey && ( aKeyEvent.iScanCode == EStdKeyNo ||
-         aKeyEvent.iScanCode == EStdKeyApplication0 ) )
-        {
-        switch ( iState )
-            {
-            case EVoiceMail:
-                iVmbx.Close();
-                keyEvent = EKeyWasConsumed;
-                break;
-
-            case ENewMessage:
-                Cancel();
-
-                if ( iCoeEnv && iEikonEnv->EikAppUi() )
-                    {
-                    iEikonEnv->EikAppUi()->RemoveFromStack( this );
-                    }
-                keyEvent = EKeyWasConsumed;
-                break;
-                
-            case EQueryDialog:            
-                DismissQueryDialog();
-                    
-                keyEvent = EKeyWasConsumed;
-                break;
-
-            default:
-                break;
-            }
-        }
-
-    return keyEvent;
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::HandleNotifyL
-// ---------------------------------------------------------
-//    
-TInt CVCApplicationControllerImpl::HandleNotifyL( TInt aCmdId, TInt /*aEventId*/,
-                                                  CAiwGenericParamList& /*aEventParamList*/,
-                                                  const CAiwGenericParamList& /*aInParamList*/ )
-    {
-    RUBY_DEBUG_BLOCKL( "CVCApplicationControllerImpl::HandleNotifyL" );
-    
-    if ( aCmdId == KAiwCmdCall )
-        {
-        if ( iWait.IsStarted() )
-            {
-            iWait.AsyncStop();
-            }
-        }
-        
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------
-// CVCApplicationControllerImpl::HandleActiveObjectStatus
-// ---------------------------------------------------------
-//
-void CVCApplicationControllerImpl::HandleActiveObjectStatus(TInt aStatus)
-    {
-    RUBY_DEBUG1( "CVCApplicationControllerImpl::HandleActiveObjectStatus() aStatus = %d", aStatus);
-    
-    // Cancel active object and note.
-    iActiveObject->Cancel();
-    iGlobalConfQuery->CancelConfirmationQuery();    
-    
-    // Check that user pressed softkey YES
-    if ( (aStatus == EAknSoftkeyYes ||    
-          aStatus == EAknSoftkeySelect ||
-          aStatus == EAknSoftkeyOk) && 
-          iProfileEngine )    
-        {
-        TRAP_IGNORE( iProfileEngine->SetActiveProfileL( iProfileId ) );
-        }
-    }
-    
-// ----------------------------------------------------------------------------
-// CVCApplicationControllerImpl::CreateConnectionL
-// Connects to RApaLsSession.
-// ----------------------------------------------------------------------------
-//
-void CVCApplicationControllerImpl::CreateApaConnectionL()
-    {
-    iApaLsSession = new RApaLsSession();
-       
-    if ( !iApaLsSession->Handle() )
-        {
-        User::LeaveIfError( iApaLsSession->Connect() );
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CVCApplicationControllerImpl::ActivateAppL
-// Used to launch applications. Checks whether an instance of the launched
-// application is already running.
-// ----------------------------------------------------------------------------
-//
-void CVCApplicationControllerImpl::ActivateAppL( const TUid aUid,
-                                                 TBool aMultipleInstances )
-    {
-    CreateApaConnectionL();
-
-    if ( aMultipleInstances )
-        {
-        ActivateAppInstanceL( aUid );
-        }
-    else
-        {
-        // Session to window server
-        RWsSession wsSession;
-        User::LeaveIfError( wsSession.Connect() );
-        CleanupClosePushL( wsSession );
-        
-        TApaTaskList apaTaskList( wsSession );
-        TApaTask apaTask = apaTaskList.FindApp( aUid );
-        if ( apaTask.Exists() )
-            {
-            // Already running, close application
-            apaTask.EndTask();
-            }
-        ActivateAppInstanceL( aUid );
-            
-        CleanupStack::PopAndDestroy( &wsSession );
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CVCApplicationControllerImpl::ActivateAppInstanceL
-// Activates an instance of an application.
-// ----------------------------------------------------------------------------
-//
-void CVCApplicationControllerImpl::ActivateAppInstanceL( const TUid aUid )
-    {
-    TApaAppInfo appInfo;
-    User::LeaveIfError( iApaLsSession->GetAppInfo( appInfo, aUid ) );
-    TFileName appName = appInfo.iFullName;
-    CApaCommandLine* apaCommandLine = CApaCommandLine::NewLC();
-
-    apaCommandLine->SetExecutableNameL( appName );
-    apaCommandLine->SetCommandL( EApaCommandRun );
-    
-    User::LeaveIfError ( iApaLsSession->StartApp( *apaCommandLine ) );
-    CleanupStack::PopAndDestroy( apaCommandLine );
-    }
-
-// ----------------------------------------------------------------------------
-// CVCApplicationControllerImpl::DismissQueryDialog
-// Closes query dialog
-// ----------------------------------------------------------------------------
-//
-void CVCApplicationControllerImpl::DismissQueryDialog()
-    {
-    if ( iQueryDialog )
-        {
-        iQueryDialog->MakeLeftSoftkeyVisible( EFalse );
-        TRAP_IGNORE( iQueryDialog->DismissQueryL() );
-        }
-    }
-
-// End of File