locationmapnavfw/aiwprovider/src/mnaiwprovider.cpp
branchRCL_3
changeset 44 2b4ea9893b66
parent 42 02ba3f1733c6
child 45 6b6920c56e2f
--- a/locationmapnavfw/aiwprovider/src/mnaiwprovider.cpp	Thu Aug 19 10:20:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,883 +0,0 @@
-/*
-* 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:  CMnAiwProvider class implementation
-*
-*/
-
-
-#include <badesca.h>
-
-#include <aknlistquerydialog.h>
-#include <AknGlobalNote.h>
-
-#include <AiwMenu.h>
-#include <AiwGenericParam.hrh>
-#include <AiwCommon.hrh>
-#include <aknenv.h>
-
-#include <ecom/implementationproxy.h>
-
-#include <mnaiwproviderres.rsg>
-#include "mnaiwprovideruids.hrh"
-
-#include <lbsposition.h>
-
-#include <mnprovider.h>
-#include <mnproviderfinder.h>
-#include <mnmapview.h>
-#include <mnnavigator.h>
-#include <mngeocoder.h>
-#include <mnutils.h>
-#include <mnappservices.hrh>
-
-#include "mnaiwdebug.h"
-#include "mnaiwinternal.h"
-
-#include "mnaiwservices.h"
-#include "mnaiwmenus.hrh"
-
-#include "mnaiwprovider.h"
-
-// =========================== LOCAL FUNCTIONS =================================
-
-// ---------------------------------------------------------------------------
-//  Cleanup item for RPointerArray<CMnProvider>
-// ---------------------------------------------------------------------------
-//
-void CleanupProvidersArray( TAny* aArray )
-    {
-    ( static_cast<RPointerArray<CMnProvider>*>( aArray ) )->ResetAndDestroy();
-    }
-
-// ---------------------------------------------------------------------------
-//  Identity relation for providers. Based on UID
-// ---------------------------------------------------------------------------
-//
-TBool ProvidersMatchByUid( const CMnProvider& aOne, const CMnProvider& aAnother )
-	{
-	return ( aOne.Uid().iUid == aAnother.Uid().iUid );
-	}
-
-// ========================== MEMBER FUNCTIONS =================================
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CMnAiwProvider* CMnAiwProvider::NewL()
-    {
-    LOG( "CMnAiwProvider::NewL in" );
-
-    CMnAiwProvider* self = new (ELeave) CMnAiwProvider();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-
-    LOG( "CMnAiwProvider::NewL out" );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CMnAiwProvider::CMnAiwProvider()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CMnAiwProvider::~CMnAiwProvider()
-    {
-    LOG( "~CMnAiwProvider in" );
-
-    delete iEventList;
-
-    CloseAllHandlers();
-    iHandlers.Close();
-
-    if ( iEikon )
-        {
-        iEikon->DeleteResourceFile( iResourceOffset );
-        }
-    iMnProviders.ResetAndDestroy();
-
-    LOG( "~CMnAiwProvider out" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::ConstructL()
-    {
-    LOG( "CMnAiwProvider::ConstructL in" );
-#ifdef _DEBUG
-    TTime start;
-    start.UniversalTime();
-#endif
-
-    iEikon = CEikonEnv::Static();
-
-    TRAPD( err, MnUtils::FindLocalizedResourceFileL( iEikon->FsSession(), KAiwResourceFile, iResourceFilename ) );
-    if ( err == KErrNotFound )
-        {
-        // try to find it with the name it had in 3.1
-        // this is needed for the case, when upgrade is installed on 3.1-based terminals
-        MnUtils::FindLocalizedResourceFileL( iEikon->FsSession(), KAiwResourceFileOld, iResourceFilename );
-        }
-    iResourceOffset = iEikon->AddResourceFileL( iResourceFilename );
-
-    iEventList = CAiwGenericParamList::NewL();
-
-#ifdef _DEBUG
-    TTime finish;
-    finish.UniversalTime();
-    TTimeIntervalMicroSeconds elapsed = finish.MicroSecondsFrom( start );
-    LOG1( "CMnAiwProvider::ConstructL out ( in %ld microseconds ) ", elapsed.Int64() );
-#endif
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TInt CMnAiwProvider::GetAiwServiceCommandIdL( const CAiwGenericParamList& aInParamList )
-    {
-    TInt index = 0;
-    const TAiwGenericParam* param = aInParamList.FindFirst( index, EGenericParamServiceCommand );
-    if ( index < 0 )
-        {
-        LOG( "CMnAiwProvider::GetServiceCommandL: param not found" );
-        User::Leave( KErrArgument );
-        }
-
-    TInt32 num = 0;
-    const TAiwVariant& val = param->Value();
-    if ( !val.Get( num ) )
-        {
-        LOG( "CMnAiwProvider::GetServiceCommandL: param value not found" );
-        User::Leave( KErrArgument );
-        }
-    return num;
-    }
-
-// -----------------------------------------------------------------------------
-// From CAiwServiceIfBase
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::InitialiseL(
-    MAiwNotifyCallback& /*aFrameworkCallback*/,
-    const RCriteriaArray& /*aInterest*/ )
-    {
-    LOG("CMnAiwProvider::InitialiseL");
-    }
-
-// -----------------------------------------------------------------------------
-// From CAiwServiceIfBase
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::HandleServiceCmdL(
-    const TInt& aCmdId,
-    const CAiwGenericParamList& aInParamList,
-    CAiwGenericParamList& aOutParamList,
-    TUint aCmdOptions,
-    const MAiwNotifyCallback* aCallback)
-    {
-    LOG1("CMnAiwProvider::HandleServiceCmdL cmdId: %x", aCmdId);
-
-    if ( aCmdOptions & KAiwOptCancel )
-        {
-        // this is call to cancel async request,
-        // not supported yet - ignoring, but not starting new one.
-        LOG("CMnAiwProvider::HandleServiceCmdL attempt to cancel, exit");
-        return;
-        }
-
-    CMnAiwCommandHandlerBase::TAiwParameters
-        aiwParams( aInParamList, aOutParamList, aCallback );
-
-    switch ( aCmdId )
-        {
-        case KAiwCmdMnShowMap:
-        case KAiwCmdMnNavigateTo:
-            {
-            TInt err = KErrNone;
-            TBool stop = EFalse;
-            while ( !stop )
-                {
-                TRAP( err, ProcessSyncAiwCommandL( aCmdId, aiwParams ) );
-                ProcessAiwCommandResultL( aCmdId, aiwParams, err, stop );
-                }
-            User::LeaveIfError( err );
-            }
-            break;
-
-        case KAiwCmdMnSelectFromMap:
-        case KAiwCmdMnCoordByAddr:
-        case KAiwCmdMnAddrByCoord:
-            if ( !aCallback )
-                {
-                User::Leave( KErrArgument );
-                }
-            StartAsyncAiwCommandL( aCmdId, aiwParams );
-            break;
-
-        default:
-            User::Leave( KErrNotSupported );
-            break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::ProcessSyncAiwCommandL(
-    TInt aCommandId,
-    CMnAiwCommandHandlerBase::TAiwParameters& aAiwParams )
-    {
-    LOG("CMnAiwProvider::ProcessSyncAiwCommandL in");
-
-	CMnAiwCommandHandlerBase* handler = HandlerL( aCommandId, aAiwParams );
-    handler->StartL();
-
-    LOG("CMnAiwProvider::ProcessSyncAiwCommandL out");
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::StartAsyncAiwCommandL(
-    TInt aCommandId,
-    CMnAiwCommandHandlerBase::TAiwParameters& aAiwParams )
-    {
-    LOG("CMnAiwProvider::StartAsyncAiwCommandL in");
-
-    TBool stop = EFalse;
-    while ( !stop )
-        {
-        TInt err = KErrNone;
-        CMnAiwCommandHandlerBase* handler = NULL;
-        TRAP( err, handler = HandlerL( aCommandId, aAiwParams ) );
-
-        if ( !err )
-            {
-            handler->Start( *this );
-            break;
-            }
-        else
-            {
-            if ( handler )
-                {
-                CloseHandler( handler );
-                }
-
-            if ( err == KErrCancel )
-                {
-                // must stop if provider selection fails
-                stop = ETrue;
-                }
-            else
-                {
-                // this is error from command start
-                ProcessAiwCommandResultL( aCommandId, aAiwParams, err, stop );
-                }
-
-            if ( stop )
-                {
-                // couldn't start command
-                NotifyAiwObserver( aCommandId, aAiwParams, err );
-                }
-            }
-        }
-
-    LOG("CMnAiwProvider::StartAsyncAiwCommandL out");
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CMnAiwCommandHandlerBase* CMnAiwProvider::HandlerL(
-    TInt aCommandId,
-    CMnAiwCommandHandlerBase::TAiwParameters& aAiwParams )
-    {
-    LOG("CMnAiwProvider::HandlerL in");
-
-    CMnProvider& provider = SelectProviderL( aCommandId, aAiwParams );
-
-    CMnAiwCommandHandlerBase::TRunMode runMode =
-        CMnAiwCommandHandlerBase::RequestedRunModeL( aAiwParams );
-
-    if ( runMode == CMnAiwCommandHandlerBase::ERunModeDefault )
-        {
-        runMode = CMnAiwCommandHandlerBase::DefaultRunMode( aCommandId );
-        }
-
-    if ( runMode == CMnAiwCommandHandlerBase::ERunModeDefault )
-        {
-        User::Leave( KErrNotSupported );
-        }
-
-    CMnAiwCommandHandlerBase* handler = FindWorkingHandler( aCommandId, provider, runMode );
-
-    if ( !handler )
-        {
-        handler = CMnAiwCommandHandlerBase::CreateHandlerL( aCommandId, provider, runMode );
-        CleanupStack::PushL( handler );
-        handler->SetExitObserverL( *this );
-        iHandlers.AppendL( handler );
-        CleanupStack::Pop( handler );
-        }
-    else
-        {
-        LOG("CMnAiwProvider::HandlerL, working handler found, reusing");
-        handler->ResetParametersL();
-        }
-
-    handler->SetParametersL( aAiwParams );
-
-    LOG("CMnAiwProvider::HandlerL out");
-    return handler;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::HandleAsyncAiwCmdCompletedL(
-    CMnAiwCommandHandlerBase* aHandler,
-    TInt aResult )
-    {
-    LOG1("CMnAiwProvider::HandleAsyncAiwCmdCompletedL in, result %d", aResult );
-
-    TInt command = aHandler->CommandId();
-    CMnAiwCommandHandlerBase::TAiwParameters aiwParams = aHandler->AiwParameters();
-
-    CloseHandler( aHandler );
-
-    TBool stop = EFalse;
-    ProcessAiwCommandResultL( command, aiwParams, aResult, stop );
-
-    if ( stop )
-        {
-        NotifyAiwObserver( command, aiwParams, aResult );
-        }
-    else
-        {
-        StartAsyncAiwCommandL( command, aiwParams );
-        }
-
-    LOG("CMnAiwProvider::HandleAsyncAiwCmdCompletedL out");
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::HandleProviderExit(
-    CMnAiwCommandHandlerBase* aHandler )
-    {
-    LOG("CMnAiwProvider::HandleProviderExit in" );
-
-	CloseHandler( aHandler );
-
-    LOG("CMnAiwProvider::HandleProviderExit out");
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::NotifyAiwObserver(
-    TInt aCommandId,
-    CMnAiwCommandHandlerBase::TAiwParameters& aAiwParams,
-    TInt aResult )
-    {
-    LOG2("CMnAiwProvider::NotifyAiwObserver in, command 0x%X, result %d", aCommandId, aResult);
-    __ASSERT_DEBUG( aAiwParams.Callback(), Panic( KErrGeneral) );
-
-    MAiwNotifyCallback* callback = const_cast<MAiwNotifyCallback*>( aAiwParams.Callback() );
-
-    TInt err = KErrNone;
-    iEventList->Reset();
-    if ( aResult )
-        {
-        TAiwGenericParam error( EGenericParamError, TAiwVariant( aResult ) );
-        TRAP_IGNORE( iEventList->AppendL( error ) );
-
-        TRAP( err, callback->HandleNotifyL(
-            aCommandId, KAiwEventError, *iEventList, aAiwParams.InList() ) );
-        }
-    else
-        {
-        TRAP( err, callback->HandleNotifyL(
-            aCommandId, KAiwEventCompleted, *iEventList, aAiwParams.InList() ) );
-        }
-
-    LOG("CMnAiwProvider::NotifyAiwObserver out");
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::CloseHandler( CMnAiwCommandHandlerBase* aHandler )
-    {
-    LOG("CMnAiwProvider::CloseHandler in");
-
-    if ( aHandler->IsActive() )
-    	{
-    	// make sure we are not panicked if async handler is closed while active.
-    	// at first, command is only cancelled. Cancel will call this method again,
-    	// then this object will be deleted.
-    	aHandler->Cancel();
-    	}
-
-	TInt index = iHandlers.Find( aHandler );
-	if ( index != KErrNotFound )
-	    {
-    	delete aHandler;
-    	iHandlers.Remove( index );
-	    }
-    LOG1("CMnAiwProvider::CloseHandler out, deleted handler %d", index);
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::ProcessAiwCommandResultL( 
-    TInt aAiwCommandId, 
-    CMnAiwCommandHandlerBase::TAiwParameters& aAiwParams,
-    TInt aResult, 
-    TBool& aStop )
-    {
-    LOG1("CMnAiwProvider::ProcessAiwCommandResultL in, result %d", aResult);
-
-    TBool banMessages = EFalse;
-    if ( CMnAiwCommandHandlerBase::IsErrorMessageDisabledL( aAiwParams ) )
-        {
-        banMessages = ETrue;
-        }
-    
-    TInt unusedProviderId( 0 );
-    TInt messageId( 0 );
-    
-    if ( aResult == KErrNone || aResult == KErrCancel )
-        {
-        aStop = ETrue;
-        }
-    else if ( CMnAiwCommandHandlerBase::IsProviderSpecifiedL( aAiwParams, unusedProviderId ) ) 
-        {
-        aStop = ETrue;
-        messageId = R_MN_ERROR_SERVICE_UNAVAILABLE;
-        }
-    else if ( NumSuitableProviders( aAiwCommandId ) < 2 )
-        {
-        aStop = ETrue;
-        messageId = R_MN_ERROR_NO_PROVIDER;
-        }
-    else
-        {
-        aStop = EFalse;
-        messageId = R_MN_ERROR_SERVICE_UNAVAILABLE;
-        }
-    
-    if ( !banMessages && messageId )
-        {
-        ErrorNote( messageId );
-        }
-
-    LOG("CMnAiwProvider::ProcessAiwCommandResultL out");
-    }
-
-// -----------------------------------------------------------------------------
-// From CAiwServiceIfMenu
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::InitializeMenuPaneL(
-    CAiwMenuPane& aMenuPane,
-    TInt aIndex,
-    TInt /*aCascadeId*/,
-    const CAiwGenericParamList& aInParamList)
-    {
-    LOG( "CMnAiwProvider::InitializeMenuPaneL in" );
-
-    TInt svcCmdId = GetAiwServiceCommandIdL( aInParamList );
-    if ( !IsServiceAvailableL( svcCmdId ) )
-        {
-        LOG1( "CMnAiwProvider::InitializeMenuPaneL svc 0x%X is not available, out", svcCmdId );
-        return;
-        }
-
-    switch ( svcCmdId )
-        {
-        case KAiwCmdMnShowMap:
-            aMenuPane.AddMenuItemsL(
-                iResourceFilename,
-                R_MN_AIWMENU_SHOW_ON_MAP,
-                KAiwCmdMnShowMap,
-                aIndex);
-            break;
-
-        case KAiwCmdMnSelectFromMap:
-            aMenuPane.AddMenuItemsL(
-                iResourceFilename,
-                R_MN_AIWMENU_SELECT_FROM_MAP,
-                KAiwCmdMnSelectFromMap,
-                aIndex);
-            break;
-
-        case KAiwCmdMnNavigateTo:
-            aMenuPane.AddMenuItemsL(
-                iResourceFilename,
-                R_MN_AIWMENU_NAVIGATE_TO,
-                KAiwCmdMnNavigateTo,
-                aIndex);
-            break;
-
-        case KAiwCmdMnCoordByAddr:
-            aMenuPane.AddMenuItemsL(
-                iResourceFilename,
-                R_MN_AIWMENU_FETCH_COORDINATES,
-                KAiwCmdMnCoordByAddr,
-                aIndex);
-            break;
-
-        case KAiwCmdMnAddrByCoord:
-            aMenuPane.AddMenuItemsL(
-                iResourceFilename,
-                R_MN_AIWMENU_FETCH_ADDRESS,
-                KAiwCmdMnAddrByCoord,
-                aIndex);
-            break;
-        }
-    LOG( "CMnAiwProvider::InitializeMenuPaneL out" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// From CAiwServiceIfMenu
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::HandleMenuCmdL(
-    TInt aMenuCmdId,
-    const CAiwGenericParamList& aInParamList,
-    CAiwGenericParamList& aOutParamList,
-    TUint aCmdOptions,
-    const MAiwNotifyCallback* aCallback)
-    {
-    LOG( "CMnAiwProvider::HandleMenuCmdL in" );
-
-    TInt svcCmdId = KAiwCmdNone;
-
-    switch ( aMenuCmdId )
-        {
-        case EMnAiwMenuCmdShowOnMap:
-            svcCmdId = KAiwCmdMnShowMap;
-            break;
-
-        case EMnAiwMenuCmdSelectFromMap:
-            svcCmdId = KAiwCmdMnSelectFromMap;
-            break;
-
-        case EMnAiwMenuCmdNavigateTo:
-            svcCmdId = KAiwCmdMnNavigateTo;
-            break;
-
-        case EMnAiwMenuCmdFetchAddress:
-            svcCmdId = KAiwCmdMnAddrByCoord;
-            break;
-
-        case EMnAiwMenuCmdFetchCoordinates:
-            svcCmdId = KAiwCmdMnCoordByAddr;
-            break;
-        }
-
-    HandleServiceCmdL( svcCmdId, aInParamList, aOutParamList, aCmdOptions, aCallback );
-
-    LOG( "CMnAiwProvider::HandleMenuCmdL out" );
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TBool CMnAiwProvider::IsServiceAvailableL( TInt aAiwCommandId )
-    {
-    UpdateProvidersListL();
-    return NumSuitableProviders( aAiwCommandId ) > 0;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::UpdateProvidersListL()
-    {
-    // get new list of providers
-    RPointerArray<CMnProvider> providers;
-    CleanupStack::PushL( TCleanupItem( CleanupProvidersArray, &providers ) );
-    MnProviderFinder::FindProvidersL( providers );
-    
-    // merge new list with current list of providers
-    TIdentityRelation<CMnProvider> byUid( ProvidersMatchByUid );
-
-    // detect removed providers
-    for ( TInt i = iMnProviders.Count() - 1; i >= 0 ; i-- )
-        {
-        if ( providers.Find( iMnProviders[i], byUid ) == KErrNotFound )
-            {
-            LOG1("CMnAiwProvider::UpdateProvidersListL, provider 0x%X removed", 
-                iMnProviders[i]->Uid().iUid );
-            CloseHandlers( iMnProviders[i] );
-            delete iMnProviders[i];
-            iMnProviders.Remove( i );
-            }
-        }
-
-    // detect new providers
-    for ( TInt i = providers.Count() - 1; i >=0 ; i-- )
-		{
-		if ( iMnProviders.Find( providers[i], byUid ) == KErrNotFound )
-			{
-            LOG1("CMnAiwProvider::UpdateProvidersListL, new provider 0x%X added", 
-                providers[i]->Uid().iUid );
-			iMnProviders.AppendL( providers[i] );
-			providers.Remove( i ); // ownership is moved to iMnProviders
-			}
-		}
-
-	CleanupStack::PopAndDestroy( &providers );
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CMnAiwCommandHandlerBase* CMnAiwProvider::FindWorkingHandler(
-    TInt aAiwCommandId,
-    const CMnProvider& aProvider,
-    CMnAiwCommandHandlerBase::TRunMode aRunMode )
-    {
-    for ( TInt i = 0; i < iHandlers.Count(); i++ )
-        {
-        CMnAiwCommandHandlerBase* handler = iHandlers[i];
-        if ( handler->Provider().Uid() == aProvider.Uid() &&
-             handler->CommandId() == aAiwCommandId &&
-             handler->RunMode() == aRunMode &&
-             !handler->IsActive() ) // active async handler cannot be reused
-            {
-            return iHandlers[i];
-            }
-        }
-    return NULL;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::CloseHandlers( const CMnProvider* aProvider )
-	{
-	for ( TInt i = iHandlers.Count() - 1; i >= 0 ; i-- )
-		{
-		if ( ProvidersMatchByUid( iHandlers[i]->Provider(), *aProvider ) )
-			{
-			CloseHandler( iHandlers[i] ); // this will modify the handlers list
-			}
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::CloseAllHandlers()
-	{
-	for ( TInt i = iHandlers.Count() - 1; i >= 0 ; i-- )
-		{
-		CloseHandler( iHandlers[i] ); // this will modify the handlers list
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::GetSuitableProvidersL(
-    TInt aAiwCommandId,
-    RPointerArray<CMnProvider>& aProviders )
-    {
-    LOG1("CMnAiwProvider::GetSuitableProvidersL in, Cmd %x", aAiwCommandId);
-
-    CMnProvider::TService serviceNeeded = CMnProvider::EServiceNone;
-    TInt featuresNeeded = 0;
-
-    CMnAiwCommandHandlerBase::AppServiceAndFeatureNeeded(
-        aAiwCommandId, serviceNeeded, featuresNeeded );
-
-    for ( TInt i = 0; i < iMnProviders.Count(); i++ )
-        {
-        CMnProvider* provider = iMnProviders[i];
-
-        if ( ( provider->SupportedServices() & serviceNeeded ) &&
-             ( provider->SupportedFeatures( serviceNeeded ) & featuresNeeded ) )
-            {
-            LOG1("CMnAiwProvider::GetSuitableProvidersL using 0x%X", provider->Uid().iUid);
-            aProviders.AppendL( provider );
-            }
-        }
-    LOG("CMnAiwProvider::GetSuitableProvidersL out");
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TInt CMnAiwProvider::NumSuitableProviders( TInt aAiwCommandId )
-    {
-    CMnProvider::TService serviceNeeded = CMnProvider::EServiceNone;
-    TInt featuresNeeded = 0;
-
-    CMnAiwCommandHandlerBase::AppServiceAndFeatureNeeded(
-        aAiwCommandId, serviceNeeded, featuresNeeded );
-
-    TInt count = 0;
-    for ( TInt i = 0; i < iMnProviders.Count(); i++ )
-        {
-        CMnProvider* provider = iMnProviders[i];
-
-        if ( ( provider->SupportedServices() & serviceNeeded ) &&
-             ( provider->SupportedFeatures( serviceNeeded ) & featuresNeeded ) )
-            {
-            count++;
-            }
-        }
-    return count;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CMnProvider& CMnAiwProvider::SelectProviderL( 
-    TInt aAiwCommandId,
-    CMnAiwCommandHandlerBase::TAiwParameters& aAiwParams )
-    {
-    CMnProvider* provider = NULL;
-
-    RPointerArray<CMnProvider> mnProviders; // array does _not_ own items
-    CleanupClosePushL( mnProviders );
-
-    UpdateProvidersListL();
-    GetSuitableProvidersL( aAiwCommandId, mnProviders );
-    
-    TInt requestedProviderId( 0 );
-    if ( CMnAiwCommandHandlerBase::IsProviderSpecifiedL( aAiwParams, requestedProviderId ) )
-        {
-        for ( int i = 0; i < mnProviders.Count(); i++ )
-            {
-            if ( mnProviders[i]->Uid().iUid == requestedProviderId )
-                {
-                provider = mnProviders[i];
-                break;
-                }
-            }
-        
-        if ( !provider )
-            {
-            User::Leave( KErrArgument );
-            }
-        }
-    else if ( mnProviders.Count() > 1 )
-        {
-        TInt index = KErrNotFound;
-        ExecuteSelectionDialogL( index, mnProviders );
-            provider = mnProviders[index];
-        }
-    else if ( mnProviders.Count() == 1 )
-        {
-        provider = mnProviders[0];
-        }
-    else
-        {
-        User::Leave( KErrNotSupported );
-        }
-
-    CleanupStack::PopAndDestroy( &mnProviders );
-    LOG1("CMnAiwProvider::SelectProviderL, selected 0x%X", provider->Uid().iUid);
-    return *provider;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::ExecuteSelectionDialogL(
-    TInt& aIndex,
-    RPointerArray<CMnProvider>& aProviders )
-    {
-    CDesCArraySeg* textArray = new (ELeave) CDesCArraySeg( aProviders.Count() );
-    CleanupStack::PushL( textArray );
-
-    for ( TInt i = 0; i < aProviders.Count(); i++ )
-        {
-        TPtrC shortName;
-        aProviders[i]->GetShortName( shortName );
-        textArray->AppendL( shortName );
-        }
-
-    CAknListQueryDialog* dlg = new (ELeave) CAknListQueryDialog( &aIndex );
-    dlg->PrepareLC( R_MN_PROVIDER_LIST_QUERY );
-
-    dlg->SetItemTextArray( textArray );
-    dlg->SetOwnershipType( ELbmOwnsItemArray );
-
-    TInt result = dlg->RunLD();
-    CleanupStack::Pop( textArray );
-
-    if ( !result )
-        {
-        User::Leave( KErrCancel );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::ErrorNote( TInt aResourceId )
-    {
-    TRAP_IGNORE( DoErrorNoteL( aResourceId ) );
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnAiwProvider::DoErrorNoteL( TInt aResourceId )
-    {
-    HBufC* noteText = iEikon->AllocReadResourceLC( aResourceId );
-
-    CAknGlobalNote* note = CAknGlobalNote::NewLC();
-    note->ShowNoteL( EAknGlobalErrorNote, *noteText );
-    CleanupStack::PopAndDestroy( note );
-
-    CleanupStack::PopAndDestroy( noteText );
-    }
-
-// ======== GLOBAL FUNCTIONS ========
-
-// -----------------------------------------------------------------------------
-// Map the interface UIDs to implementation factory functions
-// -----------------------------------------------------------------------------
-//
-const TImplementationProxy ImplementationTable[] =
-    {
-    IMPLEMENTATION_PROXY_ENTRY( KMnAiwProviderBaseImplUid, CMnAiwProvider::NewL ),
-    IMPLEMENTATION_PROXY_ENTRY( KMnAiwProviderMenuImplUid, CMnAiwProvider::NewL )
-    };
-
-// -----------------------------------------------------------------------------
-// Exported proxy for instantiation method resolution
-// -----------------------------------------------------------------------------
-//
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
-    {
-    aTableCount = ( sizeof ImplementationTable ) / sizeof( TImplementationProxy );
-    return ImplementationTable;
-    }