diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstengine/src/cvimpstengineservicetablefetcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstengine/src/cvimpstengineservicetablefetcher.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,609 @@ +/* +* 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: Handles the use of Service Provider Settings API +* +*/ + + +// INCLUDE FILES +#include +#include +#include + + +// Phonebook shutter +#include +#include +#include +#include +#include + +#include "cvimpstengineservicetablefetcher.h" +#include "cvimpstenginecchhandler.h" + +#include "vimpstextentionuiuid.h" +#include "tvimpstconsts.h" +#include "mvimpstenginefactory.h" +#include "cvimpstenginefactory.h" +#include "mvimpststorageserviceview.h" +#include "cvimpststoragemanagerfactory.h" +#include "uiservicetabtracer.h" + + + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::CVIMPSTEngineServiceTableFetcher() +// --------------------------------------------------------------------------- +// +CVIMPSTEngineServiceTableFetcher::CVIMPSTEngineServiceTableFetcher() + { + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::ConstructL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::ConstructL() + { + TRACER_AUTO; + iSettings = CSPSettings::NewL(); + CompressViewIdsL(); + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::NewL() +// --------------------------------------------------------------------------- +// +CVIMPSTEngineServiceTableFetcher* + CVIMPSTEngineServiceTableFetcher::NewL( ) + { + TRACER_AUTO; + + CVIMPSTEngineServiceTableFetcher* self = NewLC(); + CleanupStack::Pop(self); + + return self; + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::NewLC() +// --------------------------------------------------------------------------- +// +CVIMPSTEngineServiceTableFetcher* + CVIMPSTEngineServiceTableFetcher::NewLC() + { + TRACER_AUTO; + + CVIMPSTEngineServiceTableFetcher* self = + new (ELeave) CVIMPSTEngineServiceTableFetcher( ); + CleanupStack::PushL(self); + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher:: +// ~CVIMPSTEngineServiceTableFetcher() +// --------------------------------------------------------------------------- +// +CVIMPSTEngineServiceTableFetcher::~CVIMPSTEngineServiceTableFetcher() + { + TRACER_AUTO; + + + delete iSettings; + iSettings = NULL; + + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::GetMasterServiceIdsL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::GetMasterServiceIdsL( + RArray& aServiceIds ) + { + TRACER_AUTO; + + RArray services; + CleanupClosePushL( services ); + iSettings->FindServiceIdsL( services ); + + const TInt serviceCount = services.Count(); + for ( TInt i( 0 ); i < serviceCount; i++ ) + { + TUint32 refContactUid = ContactViewUidL( services[i] ); + + if ( TUid::Uid( refContactUid ) == + TUid::Uid( KIMCONTACTSEXTNIMPLEMENTATIONUID ) + || TUid::Uid( refContactUid ) == + TUid::Uid( 0x20007B6D ) ) + { + TRACE( " found serviceid: (%d)", services[ i ] ); + + aServiceIds.Append( services[ i ] ); + + TRACE("service append ok" ); + + } + } + CleanupStack::PopAndDestroy( &services ); + + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::GetContactStoreIdL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::GetContactStoreIdL( + TUint32 aServiceId, TDes& aContactStoreId ) + { + TRACER_AUTO; + + TRACE( "ServiceId: %d", aServiceId ); + + CSPProperty* property = CSPProperty::NewLC(); + TInt err = iSettings->FindPropertyL( aServiceId, + EPropertyContactStoreId, + *property ); + if (KErrNone == err) + { + err = property->GetValue( aContactStoreId ); + + } + + CleanupStack::PopAndDestroy( property ); + + TRACE( "StoreId: %S", &aContactStoreId ); + + + } + + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::GetBrandIdL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::GetBrandIdL( + TUint32 aServiceId, TDes8& aBrandId ) + { + TRACER_AUTO; + + TRACE( "ServiceId: %d", aServiceId ); + + HBufC* ret = HBufC::NewLC( KVIMPSTUISPSMaxPropertyLength ); + TPtr retPtr( ret->Des() ); + + CSPProperty* property = CSPProperty::NewLC(); + TInt err = iSettings->FindPropertyL( aServiceId, + EPropertyBrandId, + *property ); + if ( KErrNone == err ) + { + err = property->GetValue( retPtr ); + if ( KErrNone == err ) + { + aBrandId.Copy( retPtr ); + } + } + CleanupStack::PopAndDestroy( property ); + CleanupStack::PopAndDestroy( ret ); + + TRACE( "BrandId: %S", &aBrandId ); + + } + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::FindPropertyL() +// --------------------------------------------------------------------------- +// +TInt CVIMPSTEngineServiceTableFetcher::FindPropertyL( TUint32 aServiceId, + TServicePropertyName aPropertyName ) + { + TRACER_AUTO; + + TRACE( "ServiceId: %d Property: %d", aServiceId, aPropertyName ); + + CSPProperty* property = CSPProperty::NewLC(); + TInt result = iSettings->FindPropertyL( aServiceId, + aPropertyName, + *property ); + CleanupStack::PopAndDestroy( property ); + + TRACE(" Result: %d", result ); + + + return result; + } + + + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::PropertyBrandVersionL() +// --------------------------------------------------------------------------- +// +TInt CVIMPSTEngineServiceTableFetcher::PropertyBrandVersionL( + TUint32 aServiceId ) + { + TRACER_AUTO; + + TRACE( "ServiceId: %d", aServiceId ); + + TInt brandVersion = KErrNotFound; // default value + CSPProperty* property = CSPProperty::NewLC(); + TInt err = iSettings->FindPropertyL( aServiceId, + EPropertyBrandVersion, + *property ); + if ( KErrNone == err ) + { + err = property->GetValue( brandVersion ); + } + + CleanupStack::PopAndDestroy( property ); + + TRACE( "version: %d", brandVersion ); + + return brandVersion; + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::PropertyBrandLanguageL() +// --------------------------------------------------------------------------- +// +TLanguage CVIMPSTEngineServiceTableFetcher::PropertyBrandLanguageL( + TUint32 aServiceId ) + { + TRACER_AUTO; + + TRACE( " ServiceId: %d", aServiceId ); + + // ELangInternationalEnglish is selected as Default Brand Language Id. + TInt brandLanguage = ELangInternationalEnglish; + CSPProperty* property = CSPProperty::NewLC(); + TInt err = iSettings->FindPropertyL( aServiceId, + EPropertyBrandLanguage, + *property ); + if ( KErrNone == err ) + { + err = property->GetValue( brandLanguage ); + } + CleanupStack::PopAndDestroy( property ); + + TRACE( "brandLanguage: (%d) ", brandLanguage ); + + + return ((TLanguage) (brandLanguage) ); + } + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::ContactViewUidL() +// --------------------------------------------------------------------------- +// +TUint32 CVIMPSTEngineServiceTableFetcher::ContactViewUidL( + TUint32 aServiceId ) + { + TRACER_AUTO; + + TRACE( "ServiceId: %d", aServiceId ); + + TInt contactViewUid = KErrNotFound; + CSPProperty* property = CSPProperty::NewLC(); + TInt err = iSettings->FindPropertyL( aServiceId, + EPropertyContactViewPluginId, + *property ); + if ( KErrNone == err ) + { + property->GetValue( contactViewUid ); + } + CleanupStack::PopAndDestroy( property ); + + TRACE( "ContactViewUid: %d", contactViewUid ); + + + return contactViewUid; + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::GetServiceNameL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::GetServiceNameL( + TUint32 aServiceId, TDes& aServiceName ) + { + TRACER_AUTO; + + TRACE( "ServiceId: %d", aServiceId ); + + CSPEntry* entry = CSPEntry::NewLC(); + TInt err = iSettings->FindEntryL( aServiceId, *entry ) ; + if ( !err ) + { + aServiceName = entry->GetServiceName(); + } + + CleanupStack::PopAndDestroy( entry ); + + TRACE("ServiceName: %S", &aServiceName ); + + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::DoHandleNotifyChangeL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::DoHandleNotifyChangeL( + TServiceId aServiceId, TBool aNewService, MVIMPSTEngine* aEngine ) + { + TRACER_AUTO; + TRACE( "ServiceId:%d", aServiceId ); + TBool serviceFound( EFalse ); + if(!aNewService) + { + RArray serviceIdArray; + CleanupClosePushL( serviceIdArray ); + RArray services; + CleanupClosePushL( services ); + GetMasterServiceIdsL(serviceIdArray); + iSettings->FindServiceIdsL(services ); + const TInt serviceCount = services.Count(); + for ( TInt index = 0 ; index < serviceCount ; index++ ) + { + if ( services[index] == aServiceId ) + { + TRACE( "Service (%d) found", aServiceId ); + serviceFound = ETrue; + } + } + CleanupStack::PopAndDestroy( &services ); + CleanupStack::PopAndDestroy( &serviceIdArray ); + } + if ( aNewService || !serviceFound ) // new service or MECO service not found + { + // check if any other services other then MECO exists before + // shutting down the phonebook. there can be services which does't use + // MECO UI ( example OVI - does't use MECO UI it uses own UI ) + // check with the property EPropertyContactViewPluginId in the service + // this will the meco UID in case of MECO Service. + //this is a temperory hack as phonebook doesnot refresh once we delete or add any service + //once phonebook gives a permanant fix ,remove the below code + if(( TUid::Uid(ContactViewUidL( aServiceId )) == TUid::Uid( KIMCONTACTSEXTNIMPLEMENTATIONUID )) || aEngine ) + { // only MecoServicetabs shutdown phonebook. + TRACE( "removing service" ); //or while deleting service from settings + CompressViewIdsL(); //check whether engine exists,which is true for only MecoServicetabs. + if(aEngine) + { + aEngine->DeleteDataBaseL(); + } + ShutDownPhonebookL(); + } + TRACE( "service removed" ); + } + + } +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::CompressViewIdsL() +// --------------------------------------------------------------------------- +// +TBool CVIMPSTEngineServiceTableFetcher::CompressViewIdsL( + TServiceId aServiceId ) + { + TRACER_AUTO; + TRACE(" ServiceId: %d", aServiceId ); + + TBool ret = EFalse; + // Compress view id's in service table + RArray services; + CleanupClosePushL( services ); + iSettings->FindServiceIdsL( services ); + TUint32 serviceId = 0; + const TInt serviceCount = services.Count(); + for ( TInt i( 0 ); i < serviceCount; i++ ) + { + serviceId = services[i]; + TUint32 refContactUid = ContactViewUidL( serviceId ); + if ( TUid::Uid( refContactUid ) == + TUid::Uid( KIMCONTACTSEXTNIMPLEMENTATIONUID ) ) + { + + TRACE( " -> compressing view ids, service: %d", serviceId ); + TRACE( " -> compressing view ids, view id: (%d)", ( KVIMPSTTabbedViewIdBase+ serviceId ) ); + + WriteTabViewIdToServiceTableL( services[ i ], ( KVIMPSTTabbedViewIdBase + serviceId ) ); + + ret = ETrue; + } + } + CleanupStack::PopAndDestroy( &services ); + + TRACE( "CompressViewIdsL returns: (%d)", ret ); + + return ret; + } + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::WriteTabViewIdToServiceTableL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::WriteTabViewIdToServiceTableL( + TUint32 aServiceId, TUint aViewId ) + { + TRACER_AUTO; + + TRACE( "aServiceId: %d, aViewId: %d ",aServiceId, aViewId ); + + // Write specific view id to service table + // No need to check for error beacuse + // we need to add/update the property + + + CSPProperty* property = CSPProperty::NewLC(); + iSettings->FindPropertyL( aServiceId, + EPropertyContactViewId, + *property ); + + TRACE( " OK"); + + TInt err = property->SetName( EPropertyContactViewId ); + + TRACE( " ERR1=%d", err ); + + TInt err2 = property->SetValue( aViewId ); + + if ( !err && !err2 ) + { + iSettings->AddOrUpdatePropertyL( aServiceId, *property ); + } + + TRACE(" ERR2=%d", err2 ); + + + CleanupStack::PopAndDestroy( property ); + + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::ShutDownPhonebookL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::ShutDownPhonebookL() + { + TRACER_AUTO; + + // Kills phonebook if running + RWsSession ws; + User::LeaveIfError( ws.Connect() ); + CleanupClosePushL( ws ); + TApaTaskList list( ws ); + TUid uid = { KPbk2UID3 }; + TApaTask task( list.FindApp( uid ) ); + if ( task.Exists() ) + { + task.EndTask(); + } + CleanupStack::PopAndDestroy( &ws ); // ws + + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::XimpAdapterUidL() +// --------------------------------------------------------------------------- +// +TInt CVIMPSTEngineServiceTableFetcher::XimpAdapterUidL( + TUint32 aServiceId ) + { + TRACER_AUTO; + + TRACE( "ServiceId: %d", aServiceId ); + + TInt ret = KErrNotFound; + CSPProperty* property = CSPProperty::NewLC(); + + TInt err = iSettings->FindPropertyL( aServiceId, + EPropertyPCSPluginId, + *property ); + if (KErrNone == err) + { + property->GetValue( ret ); + } + + CleanupStack::PopAndDestroy( property ); + + + TRACE( "XimpAdapterUid: %d ",ret ); + + return ret; + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::PresenceRequestStatusL() +// --------------------------------------------------------------------------- +// +TVIMPSTEnums::TVIMPSTPresenceRequestStatus +CVIMPSTEngineServiceTableFetcher::PresenceRequestStatusL( + TUint32 aServiceId ) + { + TRACER_AUTO; + + TRACE( " ServiceId: %d", aServiceId ); + + TVIMPSTEnums::TVIMPSTPresenceRequestStatus ret = + TVIMPSTEnums::ESVCEPresenceRequestStatusUnKnown; + + CSPProperty* property = CSPProperty::NewLC(); + + TInt err = iSettings->FindPropertyL( aServiceId, + ESubPropertyPresenceRequestPreference, + *property ); + if ( KErrNone == err ) + { + TOnOff value = EOff; + err = property->GetValue( value ); + if ( !err ) + { + if ( EOn == value ) + { + ret = TVIMPSTEnums::ESVCEPresenceRequestStatusAutoAccept; + } + else + { + ret = TVIMPSTEnums::ESVCEPresenceRequestStatusAlwaysAsk; + } + } + } + + CleanupStack::PopAndDestroy( property ); + + TRACE("PresenceRequestStatus: %d ", ret ); + + return ret; + } + +// --------------------------------------------------------------------------- +// CVIMPSTEngineServiceTableFetcher::GetDefaultDomainNameL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineServiceTableFetcher::GetDefaultDomainNameL( + TUint32 aServiceId, TDes& aDefaultDomainName ) + { + TRACER_AUTO; + + + TRACE( "ServiceId: %d", aServiceId ); + + CSPProperty* property = CSPProperty::NewLC(); + TInt err = iSettings->FindPropertyL( aServiceId, + ESubPropertyPresenceAddrScheme, + *property ); + if (KErrNone == err) + { + property->GetValue( aDefaultDomainName ); + } + + CleanupStack::PopAndDestroy( property ); + + TRACE( " StoreId: %S", &aDefaultDomainName ); + + + } + + +// End of file