diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstui/src/cvimpstuiextensionfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstui/src/cvimpstuiextensionfactory.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,363 @@ +/* +* Copyright (c) 2008 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: Extension factory for VIMPSTUi +* +*/ + + +// INCLUDE FILES +#include "cvimpstuiextensionfactory.h" + +// System includes +#include +#include +#include +#include +#include + +// Pbk2 +#include +#include + + +// xSP extension manager +#include +#include + + +#include "vimpstextentionuiuid.h" +#include + + +#include "cvimpstuiviewmanager.h" +#include "cvimpstuiextensionservice.h" + +#include "cvimpstenginefactory.h" +#include "cvimpstuitabbedview.h" +#include "cvimpstuisearchview.h" +#include "tvimpstconsts.h" +#include "cvimpstuiblockview.h" + +#include "uiservicetabtracer.h" +#include "cvimpstuimenuextension.h" + +// ================= MEMBER FUNCTIONS ======================= + +inline CVIMPSTUiExtensionFactory::CVIMPSTUiExtensionFactory() : + iCoeEnv( *CCoeEnv::Static() ) + { + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::ConstructL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiExtensionFactory::ConstructL() + { + + // Load the Resource File + TRACER_AUTO; + TFileName resPathWithoutDrive; + resPathWithoutDrive.Zero(); + resPathWithoutDrive.Append( KResourceDir() ); + resPathWithoutDrive.Append( KResourceFileName() ); + + TFileName path; + Dll::FileName(path); //get the location of the dll + + TDriveName drive( TParsePtrC( path ).Drive( ) ); // solve drive + + // leave to stack, LC method + HBufC* resourceFilePath = HBufC::NewLC( KMaxResourcePathLength ); + TPtr ptr( resourceFilePath->Des() ); + ptr.Append( resPathWithoutDrive ); // without drive + ptr.Insert( 0, drive ); // insert drive + + // NearestLanguageFile takes only TFileName + path.Zero(); + path.Append( *resourceFilePath ); + + if ( path.Length() != 0 ) + { + BaflUtils::NearestLanguageFile( iCoeEnv.FsSession(), path ); + } + + CleanupStack::PopAndDestroy(); + + iResourceOffset = iCoeEnv.AddResourceFileL(path); + + iEngineFactoryInstance = CVIMPSTEngineFactory::InstanceL(); + + iEngine = CVIMPSTUIViewManager::NewL( + KNullDesC(), *this ); + iMenuExtension = CVIMPSTUIMenuExtension::NewL(); + // Get's all sevices + CreateServicesL(); + + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::NewL +// -------------------------------------------------------------------------- +// +CVIMPSTUiExtensionFactory* CVIMPSTUiExtensionFactory::NewL() + { + TRACER_AUTO; + CVIMPSTUiExtensionFactory* self = new (ELeave) CVIMPSTUiExtensionFactory; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::~CVIMPSTUiExtensionFactory +// -------------------------------------------------------------------------- +// +CVIMPSTUiExtensionFactory::~CVIMPSTUiExtensionFactory() + { + TRACER_AUTO; + delete iEngine; + + iCoeEnv.DeleteResourceFile( iResourceOffset ); + + //for deleting iEngineFactoryInstance + CVIMPSTEngineFactory::Release(); + + delete iMenuExtension; + + } + + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::CreateViewL +// -------------------------------------------------------------------------- +// +CxSPBaseView* CVIMPSTUiExtensionFactory::CreateViewL( TUid aViewId, CPbk2UIExtensionView& aView ) + { + TRACER_AUTO; + CxSPBaseView* view = NULL; + + TInt oldView; + TInt err = iMapper->GetOldView( KIMCONTACTSEXTNIMPLEMENTATIONUID, aViewId.iUid, oldView ); + + if( !err ) + { + + for ( TInt index = 0 ; + index < iEngine->ServiceCount() && !view ; + index++ ) + { + if ( iEngine->Service( index ).HasViewId( oldView ) ) + { + if ( IsTabbedId( oldView ) ) + { + view = iEngine->Service( index ).TabbedViewL( + *iMapper, + *iContactManager, + aView, + oldView, + aViewId, + iEngine->Service(index).ServiceEngine() ); + } + else if ( IsSearchId( oldView ) ) + { + view = iEngine->Service( index ).SearchViewL( + *iMapper, + *iContactManager, + aView, + oldView, + aViewId, + iEngine->Service(index).ServiceEngine() ); + } + else if(IsBlockeId( oldView )) + { + view = iEngine->Service( index ).BlockViewL( + *iMapper, + *iContactManager, + aView, + oldView, + iEngine->Service(index).ServiceEngine() ); + } + } + + } + } + + return view; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::RegisterViewMapper +// -------------------------------------------------------------------------- +// +void CVIMPSTUiExtensionFactory::RegisterViewMapper( MxSPViewMapper& aMapper ) + { + iMapper = &aMapper; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::ViewInfoResource +// -------------------------------------------------------------------------- +// +TInt CVIMPSTUiExtensionFactory::ViewInfoResource() const + { + TRACER_AUTO; + // Indicate KErrNotFound. This way static resources are not used but + // xSP Extension Manager queries data. Exception: If IM is not + // supported, indicate it via resource for simplicity + TInt ret = KErrNotFound; + + // add the FeatureManager checks for IM here + + // Check for any service + if ( !iEngine->ServiceCount() ) + { + ret = R_IM_CONTACTS_VIEW_INFO; + } + + return ret; + } + + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::Id +// -------------------------------------------------------------------------- +// +TUint32 CVIMPSTUiExtensionFactory::Id() const + { + return KIMCONTACTSEXTNIMPLEMENTATIONUID; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::Name() +// -------------------------------------------------------------------------- +// +const TDesC& CVIMPSTUiExtensionFactory::Name() const + { + _LIT(KNull, " "); + return KNull; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::RegisterContactManager +// -------------------------------------------------------------------------- +// +void CVIMPSTUiExtensionFactory::RegisterContactManager( MxSPContactManager& aManager ) + { + iContactManager = &aManager; + } + + + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::SetVPbkContactManager +// -------------------------------------------------------------------------- +// +void CVIMPSTUiExtensionFactory::SetVPbkContactManager( CVPbkContactManager& /*aVPbkContactManager*/ ) + { + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::UpdateStorePropertiesL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiExtensionFactory::UpdateStorePropertiesL( CPbk2StorePropertyArray& /*aPropertyArray*/ ) + { + } +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::ViewInfoCount +// -------------------------------------------------------------------------- +// +TInt CVIMPSTUiExtensionFactory::ViewInfoCount() const + { + return iEngine->ViewInfoCount(); + } +// -------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::ViewInfo +// -------------------------------------------------------------------------- +// +const MxSPViewInfo* CVIMPSTUiExtensionFactory::ViewInfo( TInt aIndex ) const + { + return iEngine->ViewInfo( aIndex ); + } + + +// --------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::CreateServicesL() +// --------------------------------------------------------------------------- +// +void CVIMPSTUiExtensionFactory::CreateServicesL() + { + TRACER_AUTO; + // Get all available services + RPointerArray engines; + + if (iEngineFactoryInstance) + { + iEngineFactoryInstance->GetServiceEnginePtr(engines); + TRACE("CreateServicesL() engines.Count(): %d", engines.Count()); + // iterate the service array + for ( TInt index = 0; index < engines.Count() ; index++ ) + { + //ServiceId is used to create unique view id for each service, to avoid the reuse of view id of existing service to newly installed service + TInt ServiceId = engines[index]->ServiceId(); + iEngine->AddNewClientL( ServiceId, *engines[index], + ( KVIMPSTTabbedViewIdBase + ServiceId ), ( KVIMPSTSearchViewIdBase + ServiceId), (KVIMPSTBlockedViewIdBase +ServiceId ), *iMenuExtension); + } + + engines.Reset(); + engines.Close(); + } + + } + +// --------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::IsSearchId() +// --------------------------------------------------------------------------- +// +TBool CVIMPSTUiExtensionFactory::IsSearchId( TUint aId ) + { + return ( aId >= KVIMPSTSearchViewIdBase && aId= KVIMPSTBlockedViewIdBase ); + } + +// --------------------------------------------------------------------------- +// CVIMPSTUiExtensionFactory::IsTabbedId() +// --------------------------------------------------------------------------- +// +TBool CVIMPSTUiExtensionFactory::IsTabbedId( TUint aId ) + { + return ( aId >= KVIMPSTTabbedViewIdBase && aId < KVIMPSTSearchViewIdBase ); + } + +// End of File