diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/CommonUI/src/CPbk2ApplicationServices.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/CommonUI/src/CPbk2ApplicationServices.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,511 @@ +/* +* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Phonebook 2 application services. +* +*/ + + +// INCLUDE FILES +#include "CPbk2ApplicationServices.h" + +// Phonebook 2 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Virtual Phonebook +#include +#include + +// System includes +#include +#include +#include + +// Debugging headers +#include +#include +#include + +/// Unnamed namespace for local definitions +namespace { + +/** + * Returns the global instance of CPbk2ApplicationServices. + * + * @return Instance of CPbk2ApplicationServices. + */ +inline CPbk2ApplicationServices* Instance() + { + return static_cast( Dll::Tls() ); + } + +} /// namespace + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CPbk2ApplicationServices +// -------------------------------------------------------------------------- +// +CPbk2ApplicationServices::CPbk2ApplicationServices() + : iLocalVariationFlags(KErrNotFound) + { + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::~CPbk2ApplicationServices +// -------------------------------------------------------------------------- +// +CPbk2ApplicationServices::~CPbk2ApplicationServices() + { + // Command handler is calling iStoreConfiguration's RemoveObserver + // in its destructor. So delete command handler before store + // configuration. + delete iServiceManager; + delete iSortOrderManager; + delete iNameFormatter; + delete iFieldProperties; + delete iViewSupplier; + delete iStoreManager; + delete iStoreConfiguration; + delete iStoreProperties; + delete iContactManager; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::ConstructL +// -------------------------------------------------------------------------- +// +inline void CPbk2ApplicationServices::ConstructL() + { + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ( "CPbk2ApplicationServices::ConstructL(0x%x)"), this ); + + // Create Virtual Phonebook contact manager for Phonebook 2 + CreateManagerL(); + + CreateSortOrderManagerL(); + CreateStorePropertyArrayL(); + CreateStoreConfigurationL(); + CreateViewSupplierL(); + + PBK2_PROFILE_START(Pbk2Profile::EAppServicesCreateStoreManager); + iStoreManager = CPbk2StoreManager::NewL + ( *iContactManager, *iStoreConfiguration, ETrue ); + PBK2_PROFILE_END(Pbk2Profile::EAppServicesCreateStoreManager); + + // Set core Phonebook 2 stores + iStoreManager->EnsureDefaultSavingStoreIncludedL(); + iStoreManager->EnsureCurrentConfigurationStoresIncludedL(); + + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ( "CPbk2ApplicationServices::ConstructL(0x%x) Store manager created"), + this ); + + iServiceManager = CPbk2ServiceManager::NewL(iContactManager->FsSession()); + + CreateFieldPropertyArrayL(); + CreateNameFormatterL(); + + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPbk2ApplicationServices::ConstructL(0x%x) end"), this); + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::NewL +// -------------------------------------------------------------------------- +// +EXPORT_C CPbk2ApplicationServices* CPbk2ApplicationServices::InstanceL() + { + CPbk2ApplicationServices* instance = Instance(); + + if ( !instance ) + { + instance = new ( ELeave ) CPbk2ApplicationServices; + CleanupStack::PushL( instance ); + User::LeaveIfError( Dll::SetTls( instance ) ); + TRAPD( error, instance->ConstructL(); ); + if( error != KErrNone ) + { + Dll::SetTls( NULL ); + User::Leave( error ); + } + + CleanupStack::Pop( instance ); + } + + instance->IncRef(); + + return instance; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::InstanceLC +// -------------------------------------------------------------------------- +// +EXPORT_C CPbk2ApplicationServices* CPbk2ApplicationServices::InstanceLC() + { + CPbk2ApplicationServices* appServices = InstanceL(); + appServices->PushL(); + return appServices; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::ContactManager +// -------------------------------------------------------------------------- +// +CVPbkContactManager& CPbk2ApplicationServices::ContactManager() const + { + return *iContactManager; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CommandHandlerL +// -------------------------------------------------------------------------- +// +MPbk2CommandHandler* CPbk2ApplicationServices::CommandHandlerL() + { + // Not supported in Base Application Services + return NULL; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::NameFormatter +// -------------------------------------------------------------------------- +// +MPbk2ContactNameFormatter& CPbk2ApplicationServices::NameFormatter() const + { + return *iNameFormatter; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::SortOrderManager +// -------------------------------------------------------------------------- +// +CPbk2SortOrderManager& CPbk2ApplicationServices::SortOrderManager() const + { + return *iSortOrderManager; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::SendUiL +// -------------------------------------------------------------------------- +// +CSendUi* CPbk2ApplicationServices::SendUiL() + { + // Not supported in Base Application Services + return NULL; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::StoreProperties +// -------------------------------------------------------------------------- +// +CPbk2StorePropertyArray& CPbk2ApplicationServices::StoreProperties() const + { + return *iStoreProperties; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::FieldProperties +// -------------------------------------------------------------------------- +// +CPbk2FieldPropertyArray& CPbk2ApplicationServices::FieldProperties() const + { + return *iFieldProperties; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::StoreConfiguration +// -------------------------------------------------------------------------- +// +CPbk2StoreConfiguration& CPbk2ApplicationServices::StoreConfiguration() const + { + return *iStoreConfiguration; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::StoreObservationRegister +// -------------------------------------------------------------------------- +// +MPbk2StoreObservationRegister& + CPbk2ApplicationServices::StoreObservationRegister() const + { + return *iStoreManager; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::StoreValidityInformer +// -------------------------------------------------------------------------- +// +MPbk2StoreValidityInformer& + CPbk2ApplicationServices::StoreValidityInformer() const + { + return *iStoreManager; + } + + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::ViewSupplier +// -------------------------------------------------------------------------- +// +MPbk2ContactViewSupplier& CPbk2ApplicationServices::ViewSupplier() const + { + return *iViewSupplier; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::GlobalMenuFilteringFlagsL +// -------------------------------------------------------------------------- +// +TInt CPbk2ApplicationServices::GlobalMenuFilteringFlagsL() const + { + return KPbk2MenuFilteringFlagsNone; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::LocallyVariatedFeatureEnabled +// -------------------------------------------------------------------------- +// +TBool CPbk2ApplicationServices::LocallyVariatedFeatureEnabled( + TVPbkLocalVariantFlags aFeatureFlag) + { + TBool ret = EFalse; + + if ( iLocalVariationFlags == KErrNotFound ) + { + GetLocalVariationFlags(); + } + + if ( iLocalVariationFlags != KErrNotFound ) + { + ret = (iLocalVariationFlags & aFeatureFlag); + } + + return ret; +} + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::MPbk2ApplicationServicesExtension +// -------------------------------------------------------------------------- +// +TAny* CPbk2ApplicationServices::MPbk2ApplicationServicesExtension( + TUid aExtensionUid ) + { + if ( aExtensionUid == KMPbk2ApplicationServicesExtension2Uid ) + { + return static_cast( this ); + } + return NULL; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::StoreManager +// -------------------------------------------------------------------------- +// +CPbk2StoreManager& CPbk2ApplicationServices::StoreManager() const + { + return *iStoreManager; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::ServicesManager +// -------------------------------------------------------------------------- +// +CPbk2ServiceManager& CPbk2ApplicationServices::ServiceManager() const + { + return *iServiceManager; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CreateManagerL +// -------------------------------------------------------------------------- +// +inline void CPbk2ApplicationServices::CreateManagerL() + { + PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING + ( "CPbk2ApplicationServices:CreateManagerL(0x%x)" ), this ); + + // Initialize contact manager with empty URI array + CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewL(); + CleanupStack::PushL( uriArray ); + + TSecurityInfo secInfo; + + // Using the security info of the current process to create contact manager + secInfo.SetToCurrentInfo(); + + iContactManager = CVPbkContactManager::NewL( secInfo, *uriArray ); + //iContactManager = CVPbkContactManager::NewL( *uriArray ); + + CleanupStack::PopAndDestroy(); // uriArray + + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPbk2ApplicationServices::CreateManagerL(0x%x) end"), this); + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CreateSortOrderManagerL +// -------------------------------------------------------------------------- +// +inline void CPbk2ApplicationServices::CreateSortOrderManagerL() + { + PBK2_PROFILE_START( Pbk2Profile::EAppServicesCreateSortOrderManager ); + + iSortOrderManager = CPbk2SortOrderManager::NewL + ( iContactManager->FieldTypes() ); + + PBK2_PROFILE_END( Pbk2Profile::EAppServicesCreateSortOrderManager ); + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CreateStorePropertyArrayL +// -------------------------------------------------------------------------- +// +inline void CPbk2ApplicationServices::CreateStorePropertyArrayL() + { + PBK2_PROFILE_START( Pbk2Profile::EAppServicesCreateStorePropertyArray ); + iStoreProperties = CPbk2StorePropertyArray::NewL(); + PBK2_PROFILE_END( Pbk2Profile::EAppServicesCreateStorePropertyArray ); + + PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING + ( "CPbk2ApplicationServices::CreateStorePropertyArrayL() done ") ); + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CreateFieldPropertyArrayL +// -------------------------------------------------------------------------- +// +inline void CPbk2ApplicationServices::CreateFieldPropertyArrayL() + { + PBK2_PROFILE_START( Pbk2Profile::EAppServicesCreateFieldPropertyArray ); + iFieldProperties = CPbk2FieldPropertyArray::NewL + ( iContactManager->FieldTypes(), iContactManager->FsSession(), + iServiceManager ); + PBK2_PROFILE_END( Pbk2Profile::EAppServicesCreateFieldPropertyArray ); + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CreateNameFormatterL +// -------------------------------------------------------------------------- +// +inline void CPbk2ApplicationServices::CreateNameFormatterL() + { + PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING + ( "CPbk2ApplicationServices::CreateNameFormatterL(0x%x)" ), this ); + + HBufC* unnamedBuf = StringLoader::LoadLC( R_QTN_PHOB_UNNAMED ); + TPtr unnamed = unnamedBuf->Des(); + MPbk2ContactNameFormatter* nameFormatter = + Pbk2ContactNameFormatterFactory::CreateL + ( unnamed, iContactManager->FieldTypes(), *iSortOrderManager, + &CCoeEnv::Static()->FsSession() ); + CleanupStack::PopAndDestroy( unnamedBuf ); + + delete iNameFormatter; + iNameFormatter = nameFormatter; + + PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING + ( "CPbk2ApplicationServices::CreateNameFormatterL(0x%x) end" ), + this ); + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CreateViewSupplierL +// -------------------------------------------------------------------------- +// +inline void CPbk2ApplicationServices::CreateViewSupplierL() + { + iViewSupplier = CPbk2ContactViewSupplier::NewL + ( *iContactManager, *iSortOrderManager, *iStoreConfiguration, + *iStoreProperties, ETrue ); + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::CreateStoreConfigurationL +// -------------------------------------------------------------------------- +// +inline void CPbk2ApplicationServices::CreateStoreConfigurationL() + { + iStoreConfiguration = CPbk2StoreConfiguration::NewL(); + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::GetLocalVariationFlags +// -------------------------------------------------------------------------- +// +void CPbk2ApplicationServices::GetLocalVariationFlags() + { + CRepository* key = NULL; + + // Read local variation flags + TRAPD( err, key = + CRepository::NewL( TUid::Uid( KCRUidPhonebook ) ) ); + + // If NewL fails do not set iLocalVariationFlags, new query is made next time + if ( err == KErrNone ) + { + err = key->Get( KPhonebookLocalVariationFlags, iLocalVariationFlags ); + if ( err != KErrNone ) + { + // If there were problems reading the flags, + // assume everything is off + iLocalVariationFlags = 0; + } + delete key; + } + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::DoRelease +// -------------------------------------------------------------------------- +// +void CPbk2ApplicationServices::DoRelease() + { + if (DecRef() == 0) + { + Dll::SetTls(NULL); + delete this; + } + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::IncRef +// -------------------------------------------------------------------------- +// +void CPbk2ApplicationServices::IncRef() + { + ++iRefCount; + } + +// -------------------------------------------------------------------------- +// CPbk2ApplicationServices::DecRef +// -------------------------------------------------------------------------- +// +TInt CPbk2ApplicationServices::DecRef() + { + return --iRefCount; + } + +// End of File