--- 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 <implementationproxy.h>
-#include "servicewidgetutils.h"
-#include "servicewidgetpluginuids.hrh"
-#include "servicewidgetcpglobals.h"
-#include "cservicewidgetservicemanager.h"
-#include "cservicewidgetcontentpublisher.h"
-#include "swpdebugtrace.h"
-#include <spsettings.h>
-#include <spproperty.h>
-#include <cvimpstsettingsstore.h>
-#include <servicewidgetpluginres.rsg>
-#include <bautils.h>
-#include <eikenv.h>
-#include <spnotifychange.h>
-
-// 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<TServiceId> 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<TUint> 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; i<serviceCount; i++ )
- {
- iServiceManagers[ i ]->UnregisterWidgetL();
- }
- iServiceManagers.ResetAndDestroy();
- }
-else
- {
- // check first all deleted services and remove their manager.
- TBool servicemanagerFound = EFalse;
- TInt serviceCount = iServiceManagers.Count();
- for( TInt i = 0; i<serviceCount; i++)
- {
- servicemanagerFound = EFalse;
- for( TInt j=0; j<count; j++ )
- {
- if( iServiceIds[ j ] == iServiceManagers[i]->ServiceId() )
- {
- 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; i<count; i++)
- {
- servicemanagerFound = EFalse;
- serviceCount = iServiceManagers.Count();
- for( TInt j=0; j<serviceCount; j++ )
- {
- if( iServiceIds[ i ] == iServiceManagers[j]->ServiceId() )
- {
- 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; index<serviceCount; index++ )
- {
- if( iServiceManagers[ index]->ServiceName().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<TAiPublisherInfo*>( &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<const TAiPublisherInfo*>( aValue );
- iInfo.iName.Copy(info->iName);
- iInfo.iNamespace.Copy(info->iNamespace);
- }
- break;
- }
- default:
- break;
- }
- TRACE_SWP(TXT("CServiceWidgetPlugin::SetPropertyL() end") );
- }*/
-// End of File