diff -r 2b7283837edb -r 3104fc151679 servicewidget/servicewidgetdatapublisher/src/cservicewidgetplugin.cpp --- a/servicewidget/servicewidgetdatapublisher/src/cservicewidgetplugin.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,463 +0,0 @@ -/* -* 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: This is a plugin implementation - * - * -*/ - - -#include "cservicewidgetplugin.h" - -#include -#include "servicewidgetutils.h" -#include "servicewidgetpluginuids.hrh" -#include "servicewidgetcpglobals.h" -#include "cservicewidgetservicemanager.h" -#include "cservicewidgetcontentpublisher.h" -#include "swpdebugtrace.h" -#include -#include -#include -#include -#include -#include -#include - -// Provide a key pair value table for ECOM. -// Used to identify the correct construction function for the requested interface - -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY( AI_UID_DLL_SERVICEWIDGETPUBLISHER_PLUGIN, - CServiceWidgetPlugin::NewL ) - }; - -// ======== GLOBAL FUNCTIONS ======== -// Return an instance of the proxy table. - -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) - { - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - return ImplementationTable; - } - -// ============================ MEMBER FUNCTIONS =============================== - -// --------------------------------------------------------------------------- -// CServiceWidgetPlugin::NewL -// --------------------------------------------------------------------------- -// -CServiceWidgetPlugin* CServiceWidgetPlugin::NewL() - { - TRACE_SWP(TXT("CServiceWidgetPlugin::NewL() start") ); - CServiceWidgetPlugin* self = new( ELeave )CServiceWidgetPlugin; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - TRACE_SWP(TXT("CServiceWidgetPlugin::NewL() End") ); - return self; - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPlugin::NewL -// --------------------------------------------------------------------------- -// -CServiceWidgetPlugin::CServiceWidgetPlugin() - { - TRACE_SWP(TXT("CServiceWidgetPlugin::CServiceWidgetPlugin() Start") ); - iEnv = CCoeEnv::Static(); - TRACE_SWP(TXT("CServiceWidgetPlugin::CServiceWidgetPlugin() End") ); - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPlugin::ConstructL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::ConstructL() - { - TRACE_SWP(TXT("CServiceWidgetPlugin::ConstructL() Start") ); - iContentPublisher = CServiceWidgetContentPublisher::NewL( *this ); - TRACE_SWP(TXT("CServiceWidgetContentPublisher created succesfully") ); - iSettingsStore = CVIMPSTSettingsStore::NewL(); - TRACE_SWP(TXT("CServiceWidgetPlugin iSettingsStore created succesfully") ); - // read service ids - ReadServiceIdsL(); - TRACE_SWP(TXT(" CServiceWidgetPlugin ReadServiceIdsL excuted") ); - LoadResourceFileL(); - TRACE_SWP(TXT(" CServiceWidgetPlugin LoadResourceFileL excuted") ); - TRACE_SWP(TXT("CServiceWidgetPlugin::ConstructL() End") ); - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPlugin::NewL -// --------------------------------------------------------------------------- -// -CServiceWidgetPlugin::~CServiceWidgetPlugin() - { - TRACE_SWP(TXT("CServiceWidgetPlugin::~CServiceWidgetPlugin() Start") ); - delete iSpNotifyChange; - iServiceManagers.ResetAndDestroy(); - delete iSettingsStore; - delete iContentPublisher; - iServiceIds.Reset(); - - if( iEnv ) - { - iEnv->DeleteResourceFile( iResourceOffset ); - } - TRACE_SWP(TXT("CServiceWidgetPlugin::~CServiceWidgetPlugin() End") ); - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPlugin::ReadServiceIdsL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::ReadServiceIdsL() - { - TRACE_SWP(TXT("CServiceWidgetPlugin::ReadServiceIdsL() Start") ); - CSPSettings* settings = CSPSettings::NewLC(); - ///////////////////////Get Service Id//////////////// - RArray services; - CleanupClosePushL( services ); - //Get the all configured service ID in services array - settings->FindServiceIdsL( services ); - const TInt serviceCount = services.Count(); - iServiceIds.Reset(); - //Append all the service ID in which service tab is interested in iServiceIds array - TRACE_SWP(TXT("CServiceWidgetPlugin::ReadServiceIdsL() serviceCount %d"), serviceCount ); - for ( TInt i( 0 ); i < serviceCount; i++ ) - { - TInt refContactUid = KErrNotFound; - CSPProperty* property = CSPProperty::NewLC(); - settings->FindPropertyL( services[i],EPropertyContactViewPluginId,*property ); - if ( property ) - { - property->GetValue( refContactUid ); - } - CleanupStack::PopAndDestroy( property ); - if ( (TUid::Uid( refContactUid ) == TUid::Uid( KMECOIMPLEMENTATIONUID )) - || (TUid::Uid( refContactUid ) == TUid::Uid( KIMServicetabPluginUid ) ) - || (TUid::Uid( refContactUid ) == TUid::Uid( 0x2002B334 ) )) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::ReadServiceIdsL() valid service id %d"), services[i] ); - iServiceIds.Append( services[i] ); - } - } - CleanupStack::PopAndDestroy( &services); //services - CleanupStack::PopAndDestroy( settings ); //settings - TRACE_SWP(TXT("CServiceWidgetPlugin::ReadServiceIdsL() End ") ); - } - - // --------------------------------------------------------------------------- -// CServiceWidgetPlugin::LoadResourceFileL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::LoadResourceFileL() - { - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() Start") ); - if( iEnv ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() iEnv is valid") ); - TFileName path; - Dll::FileName(path); //get the location of the dll - TDriveName drive( TParsePtrC( path ).Drive( ) ); // solve drive - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() TParsePtrC called") ); - // leave to stack, LC method - HBufC* resourceFilePath = HBufC::NewLC( KSW_RESOURCE_MAX_LENGTH ); - TPtr ptr( resourceFilePath->Des() ); - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() resourceFilePath called") ); - ptr.Zero(); - ptr.Append( KResourceDrive() ); - ptr.Append( KResourceFileName() ); - // NearestLanguageFile takes only TFileName - path.Zero(); - path.Append( *resourceFilePath ); - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() path.Append called") ); - if ( path.Length() != 0 ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() path length not zero") ); - BaflUtils::NearestLanguageFile( iEnv->FsSession(), path ); - } - CleanupStack::PopAndDestroy(resourceFilePath); // resourceFilePath - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() resourceFilePath deleted") ); - iResourceOffset = iEnv->AddResourceFileL(path); - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() AddResourceFileL called") ); - } - TRACE_SWP(TXT("CServiceWidgetPlugin::LoadResourceFileL() End") ); - } -// ---------------------------------------------------------------------------- -// This function updates information in CPS storage -// ---------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::UpdateL() - { - TRACE_SWP(TXT("CServiceWidgetPlugin::UpdateL() Start") ); - //Unregisrer all previously registered services. - if(iContentPublisher) - { - iContentPublisher->UnregisterAllWidgetsL(&iServiceIds); - } - //register for service table notifications - RArray serviceIds; - CleanupClosePushL( serviceIds ); - iSpNotifyChange = CSPNotifyChange::NewL( *this ); - iSpNotifyChange->NotifyChangeL( serviceIds ); - CleanupStack::PopAndDestroy( &serviceIds ) ; - - TInt serviceCount = iServiceIds.Count(); - TRACE_SWP(TXT("CServiceWidgetPlugin::UpdateL() serviceCount %d"), serviceCount ); - iServiceManagers.ResetAndDestroy(); - if( serviceCount ) - { - for( TInt i=0; i < serviceCount; i++ ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::UpdateL() service id %d"), iServiceIds[i] ); - - CServiceWidgetServiceManager* servicemanager = CServiceWidgetServiceManager::NewL( iServiceIds[i], - *iContentPublisher,*iSettingsStore ); - CleanupStack::PushL( servicemanager ); - servicemanager->RegisterWidgetL(); - iServiceManagers.Append(servicemanager); - CleanupStack::Pop(servicemanager ); - TRACE_SWP(TXT("CServiceWidgetPlugin::UpdateL() service manager created for %d" ) , iServiceIds[i] ); - }//End for - } - TRACE_SWP(TXT("CServiceWidgetPlugin::UpdateL() End") ); - } - - -// ---------------------------------------------------------------------------- -// This function Validates all serviceManagers and add or delete as per service -// CServiceWidgetPlugin::ValidateAllServicesL -// ---------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::ValidateAllServicesL() -{ -TRACE_SWP(TXT("CServiceWidgetPlugin::ValidateAllServicesL() Start") ); -TInt count = iServiceIds.Count(); -//If all services are deleted then unregister all widget first and then delete -//ServiceManager -if( count == 0 ) - { - TInt serviceCount = iServiceManagers.Count(); - for( TInt i=0; iUnregisterWidgetL(); - } - iServiceManagers.ResetAndDestroy(); - } -else - { - // check first all deleted services and remove their manager. - TBool servicemanagerFound = EFalse; - TInt serviceCount = iServiceManagers.Count(); - for( TInt i = 0; iServiceId() ) - { - servicemanagerFound = ETrue; - break; - } - }//End for J - if( !servicemanagerFound ) - { - // Delete service manager - CServiceWidgetServiceManager* servicemanager = iServiceManagers[ i ]; - //Unregister widget - servicemanager->UnregisterWidgetL(); - TRACE_SWP(TXT("CServiceWidgetContentPublisher::RegisterWidgetPublishers() UnRegistered widget servID %d"),iServiceManagers[i]->ServiceId() ); - iServiceManagers.Remove( i ); - delete servicemanager; - servicemanager = NULL; - iServiceManagers.Compress(); - serviceCount = serviceCount-1; - } - }//End For i - // Check for new services and create their manager if not exist - for( TInt i=0; iServiceId() ) - { - servicemanagerFound = ETrue; - break; - } - }//End For J - if( !servicemanagerFound ) - { - // create new service manager - CServiceWidgetServiceManager* servicemanager = CServiceWidgetServiceManager::NewL( iServiceIds[ i ], - *iContentPublisher,*iSettingsStore ); - CleanupStack::PushL( servicemanager ); - //Register widget to HS - servicemanager->RegisterWidgetL(); - iServiceManagers.Append(servicemanager); - CleanupStack::Pop(servicemanager ); - } - }//End for i - }//End Else -TRACE_SWP(TXT("CServiceWidgetPlugin::ValidateAllServicesL() End") ); -}//End ValidateAllServicesL - -// ----------------------------------------------------------------------------------- -// CServiceWidgetPlugin::HandleServiceEventL -// This function handles all homescreen callbacks (publisher received callback events -// from homescreen and directed them to plugin to take appropriate action.) -// ----------------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::HandleServiceEventL(const TDesC& aPublisherId, const TDesC8& aEvent,TDesC& aInstId ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleServiceEventL() Start") ); - CServiceWidgetServiceManager* servicemanager = NULL; - TInt serviceCount = iServiceManagers.Count(); - TInt index = KErrNotFound; - //First identify which manager is supposed to handle event - for( index=0; indexServiceName().Compare( aPublisherId ) == 0 ) - { - servicemanager = iServiceManagers[ index ]; - break; - } - } - //Take action based on Event - if( servicemanager && (index < serviceCount) && (index >=0) ) - { - if( aEvent.Compare( KActive ) == 0 ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleServiceEventL() Active Event") ); - // this publisher widget is added into homescreen. - // publish content to widget ,widget is ready to use - servicemanager->ActivateWidgetL(aInstId); - } - else if( aEvent.Compare( KResume ) == 0 ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleServiceEventL() Resume Event") ); - servicemanager->WidgetSuspended( EFalse ); - // Home screen is in foreground or back light is on now. - // publishing / removing data now will be immediately updated in your widget. - // this publisher widget is added into homescreen. - // publich content to widget ,widget is ready to use - servicemanager->UpdateContentsL(); - } - else if( aEvent.Compare( KSuspend ) == 0 || aEvent.Compare( KInactive ) == 0 ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleServiceEventL() Suspend Event") ); - // Home screen is in back ground or back light is off. - // don't publish new data now it won't be updated in your widget. - // widget is suspended - // Home screen page is switched - // // don't publish new data now it won't be updated in your widget. - // // widget is suspended and in Inactive state - servicemanager->WidgetSuspended( ETrue ); - } - else if( aEvent.Compare( KDeActive ) == 0 ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleServiceEventL() Deactive Event") ); - // this publisher widget is removed from homescreen. - // remove the last data published to homescreen. - // So that when the user add widget again it won't show the old data. - servicemanager->DeactivateWidgetL(aInstId); - } - else if( aEvent.Compare( KSelected ) == 0 ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleServiceEventL() Selected Event") ); - // this publisher widget is clicked from homescreen. - servicemanager->ExecuteActionL(); - } - } - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleServiceEventL() End") ); - }//End HandleServiceEventL - - -////////////////////////////////////////////////////////////// -// --------------------------------------------------------------------------- -// CServiceWidgetPlugin::HandleNotifyChange() -// --------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::HandleNotifyChange( - TServiceId /*aServiceId*/ ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleNotifyChange() start") ); - //This function will be triggred if any change in any service - TRAP_IGNORE( // Read the service id if any installed - ReadServiceIdsL(); - ValidateAllServicesL(); - ); - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleNotifyChange() end") ); - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPlugin::HandleError() -// --------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::HandleError( TInt /*aError*/ ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::HandleError() start/end") ); - } - -// --------------------------------------------------------------------------- -// From class MAiPropertyExtension -// Read property of publisher plug-in. -// --------------------------------------------------------------------------- -// -/*TAny* CServiceWidgetPlugin::GetPropertyL( TInt aProperty ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::GetPropertyL() start") ); - TAny* property = NULL; - - switch ( aProperty ) - { - case EAiPublisherInfo: - { - property = static_cast( &iInfo ); - break; - } - } - TRACE_SWP(TXT("CServiceWidgetPlugin::GetPropertyL() end") ); - return property; - } - -// --------------------------------------------------------------------------- -// From class MAiPropertyExtension -// Write property value to optimize the content model. -// --------------------------------------------------------------------------- -// -void CServiceWidgetPlugin::SetPropertyL( TInt aProperty, TAny* aValue ) - { - TRACE_SWP(TXT("CServiceWidgetPlugin::SetPropertyL() start") ); - switch ( aProperty ) - { - case EAiPublisherInfo: - { - if( aValue ) - { - const TAiPublisherInfo* info = static_cast( aValue ); - iInfo.iName.Copy(info->iName); - iInfo.iNamespace.Copy(info->iNamespace); - } - break; - } - default: - break; - } - TRACE_SWP(TXT("CServiceWidgetPlugin::SetPropertyL() end") ); - }*/ -// End of File