--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/src/FSDelayedLoader.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 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: Helper to do delayed processing after application startup
+*
+*/
+
+
+#include "emailtrace.h"
+#include <eikenv.h>
+#include"FSDelayedLoader.h"
+#include"FreestyleEmailUiConstants.h"
+#include "FreestyleEmailUiContactHandler.h"
+
+
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::InstanceL
+//
+// -----------------------------------------------------------------------------
+//
+CFsDelayedLoader* CFsDelayedLoader::InstanceL()
+ {
+ FUNC_LOG;
+ CFsDelayedLoader* instance = static_cast<CFsDelayedLoader*>( CCoeEnv::Static( KDelayedLoaderUid ) );
+ if ( !instance )
+ {
+ instance = new ( ELeave ) CFsDelayedLoader;
+ CleanupStack::PushL( instance );
+ instance->ConstructL();
+ CleanupStack::Pop();
+ }
+ return instance;
+ }
+
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFsDelayedLoader::ConstructL()
+ {
+ FUNC_LOG;
+ iIdle = CIdle::NewL( CActive::EPriorityIdle );
+ iIdleCallback = new (ELeave) TCallBack( IdleCallbackFunction, this );
+ }
+
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::~CFsDelayedLoader
+//
+// -----------------------------------------------------------------------------
+//
+CFsDelayedLoader::~CFsDelayedLoader()
+ {
+ FUNC_LOG;
+ iLoaders.Reset();
+
+ delete iContactHandler;
+
+ delete iIdleCallback;
+ if ( iIdle )
+ {
+ iIdle->Cancel();
+ delete iIdle;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::CFsDelayedLoader
+//
+// -----------------------------------------------------------------------------
+//
+CFsDelayedLoader::CFsDelayedLoader(): CCoeStatic( KDelayedLoaderUid )
+ {
+ FUNC_LOG;
+ }
+
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::Start
+//
+// -----------------------------------------------------------------------------
+//
+void CFsDelayedLoader::Start()
+ {
+ FUNC_LOG;
+ iLoaderIndex = 0;
+ iIdle->Start( *iIdleCallback );
+ }
+
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::GetPbkContactEngineL
+//
+// -----------------------------------------------------------------------------
+//
+CFSEmailUiContactHandler* CFsDelayedLoader::GetContactHandlerL()
+ {
+ FUNC_LOG;
+
+ if ( !iContactHandler )
+ {
+ iContactHandler = CFSEmailUiContactHandler::NewL( CEikonEnv::Static()->FsSession() );
+ }
+
+ return iContactHandler;
+ }
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::IdleCallbackFunction
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFsDelayedLoader::IdleCallbackFunction( TAny* aParam )
+ {
+ FUNC_LOG;
+ // load own items
+ CFsDelayedLoader* self = static_cast< CFsDelayedLoader* >( aParam );
+ TRAPD( error, self->GetContactHandlerL() );
+ if ( KErrNone != error )
+ {
+ //Panic!
+ }
+
+ // if there are no loaders we can stop the callback
+ if ( self->iLoaders.Count() <= 0 )
+ {
+ return 0;
+ }
+
+ // handle loaders
+ TInt r = self->iLoaders[self->iLoaderIndex]->DelayLoadCallback();
+
+ if ( r == 0 )
+ {
+ self->iLoaderIndex++;
+ if ( self->iLoaderIndex >= self->iLoaders.Count() )
+ {
+ return 0;
+ }
+ }
+
+ return 1;
+ }
+
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::AppendLoader
+//
+// -----------------------------------------------------------------------------
+//
+void CFsDelayedLoader::AppendLoader( MFsDelayedLoadingInterface& aLoader )
+ {
+ FUNC_LOG;
+ iLoaders.Append( &aLoader );
+ }
+
+// -----------------------------------------------------------------------------
+// CFsDelayedLoader::RemoveLoader
+//
+// -----------------------------------------------------------------------------
+//
+void CFsDelayedLoader::RemoveLoader( MFsDelayedLoadingInterface& aLoader )
+ {
+ FUNC_LOG;
+ for ( TInt i=0; i<iLoaders.Count(); i++ )
+ {
+ if ( iLoaders[i] == &aLoader )
+ {
+ iLoaders.Remove( i );
+ return;
+ }
+ }
+ }
+