--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/src/framework/aiuicontrollermanager.cpp Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,409 @@
+/*
+* Copyright (c) 2005-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: UI controller manager class
+*
+*/
+
+
+#include "aiuicontrollermanager.h"
+#include "aiuicontroller.h"
+#include "aicontentpublisher.h"
+#include "aicontentobserver.h"
+#include "activeidle2domaincrkeys.h"
+#include "aifwpanic.h"
+#include <ecom/ecom.h>
+#include <ecom/implementationinformation.h>
+#include <centralrepository.h>
+
+#include <aisystemuids.hrh>
+
+#include "debug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::CAiUiControllerManager()
+// ----------------------------------------------------------------------------
+//
+CAiUiControllerManager::CAiUiControllerManager()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::LoadMainControllerL()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::LoadMainControllerL(
+ CRepository& aCenRepConfig )
+ {
+ TInt value( 0 );
+
+ // Main UI Controller must be configured correctly
+ User::LeaveIfError( aCenRepConfig.Get( KAiMainUIController, value ) );
+
+ CAiUiController* controller = CAiUiController::NewL( TUid::Uid( value ) );
+
+ iCreatedUICList.Append( value );
+ CleanupStack::PushL( controller );
+
+ iMainUiController = controller->MainInterface();
+
+ // Main UI controller must be configured correctly
+ if( !iMainUiController )
+ {
+ __PRINT( __DBG_FORMAT("Main UI controller interface not found from controller 0x%x"), value );
+ User::Leave( KErrNotFound );
+ }
+
+ iUiControllerArray.AppendL( controller );
+ CleanupStack::Pop( controller );
+
+ // Register this as a UI framework observer of the main UI controller
+ iMainUiController->SetUiFrameworkObserver( *this );
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::LoadSecondaryControllersL()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::LoadSecondaryControllersL(
+ CRepository& aCenRepConfig )
+ {
+ TInt value( 0 );
+
+ // Instantiate rest of the UI controllers.
+ for( TInt key = KAiFirstUIController;
+ key <= KAiLastUIController && aCenRepConfig.Get( key, value ) == KErrNone;
+ ++key )
+ {
+ // skip empty entries
+ if( value == 0 )
+ {
+ continue;
+ }
+
+ if( iCreatedUICList.Find( value ) != KErrNotFound )
+ {
+ continue;
+ }
+
+ iCreatedUICList.Append( value );
+
+ CAiUiController* controller =
+ CAiUiController::NewL( TUid::Uid( value ) );
+
+ CleanupStack::PushL( controller );
+
+ iUiControllerArray.AppendL( controller );
+ CleanupStack::Pop( controller );
+
+ // Get the secondary interface
+ MAiSecondaryUiController* secController(
+ controller->SecondaryInterface() );
+
+ if( secController )
+ {
+ MAiUiFrameworkObserver* uiFwObserver(
+ secController->UiFrameworkObserver() );
+
+ if( uiFwObserver )
+ {
+ // Add secondary controller as UI framework event observer.
+ User::LeaveIfError(
+ iUiFrameworkObservers.InsertInAddressOrder( uiFwObserver ) );
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::ConstructL()
+ {
+ __HEAP("FW: Init - Create UI Ctrls");
+ __TIME_MARK(t);
+
+ CRepository* cenRep( NULL );
+
+#if 0
+ // For AI3_test
+ RProcess proc;
+ // 0x102750F0 in AI3, 0x2001CB4F in AI3_Test
+ TSecureId secId( proc.SecureId() );
+
+ if( secId == 0x2001CB4F )
+ {
+ cenRep = CRepository::NewL( TUid::Uid( 0x2001952B ) );
+ }
+ else
+ {
+ cenRep = CRepository::NewL( TUid::Uid( KCRUidActiveIdleLV ) );
+ }
+#else
+ cenRep = CRepository::NewLC( TUid::Uid( KCRUidActiveIdleLV ) );
+#endif
+
+ LoadMainControllerL( *cenRep );
+
+ // Failing on secondary is not fatal. Ignore leaves.
+ TRAP_IGNORE( LoadSecondaryControllersL( *cenRep ) );
+
+ CleanupStack::PopAndDestroy( cenRep );
+
+ __TIME_ENDMARK("FW: Create UI Ctrls", t);
+ __HEAP("FW: Done - Create UI Ctrls");
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::NewL()
+// ----------------------------------------------------------------------------
+//
+CAiUiControllerManager* CAiUiControllerManager::NewL()
+ {
+ CAiUiControllerManager* self = new (ELeave) CAiUiControllerManager;
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self ); // self
+
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::~CAiUiControllerManager()
+// ----------------------------------------------------------------------------
+//
+CAiUiControllerManager::~CAiUiControllerManager()
+ {
+ iUiControllerArray.ResetAndDestroy();
+
+ iUiFrameworkObservers.Reset();
+
+ iCreatedUICList.Reset();
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::UiControllers()
+// ----------------------------------------------------------------------------
+//
+RPointerArray< CAiUiController >& CAiUiControllerManager::UiControllers() const
+ {
+ return iUiControllerArray;
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::IsMainUiController()
+// ----------------------------------------------------------------------------
+//
+TBool CAiUiControllerManager::IsMainUiController(
+ CAiUiController& aUiController ) const
+ {
+ return ( aUiController.MainInterface() == iMainUiController );
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::SetEventHandler()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::SetEventHandler(
+ MAiFwEventHandler& aEventHandler )
+ {
+ for ( TInt i = 0; i < iUiControllerArray.Count(); i++ )
+ {
+ iUiControllerArray[i]->SetEventHandler( aEventHandler );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::RunApplicationL()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::RunApplicationL()
+ {
+ iMainUiController->RunApplicationL();
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::ActivateUI()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::ActivateUI()
+ {
+ for( TInt i = 0; i < iUiControllerArray.Count(); i++ )
+ {
+ iUiControllerArray[i]->ActivateUI();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::LoadUIDefinition()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::LoadUIDefinition()
+ {
+ for( TInt i = 0; i < iUiControllerArray.Count(); i++ )
+ {
+ CAiUiController* uiCtl( iUiControllerArray[i] );
+
+ MAiSecondaryUiController* secIntr( uiCtl->SecondaryInterface() );
+
+ if( secIntr )
+ {
+ secIntr->SetCoeEnv( CoeEnv() );
+ }
+
+ TRAPD( err, uiCtl->LoadUIDefinitionL() );
+
+ if( err != KErrNone )
+ {
+ if( IsMainUiController( *uiCtl ) )
+ {
+ // Main ui controller failing is fatal
+ _LIT(KAIFWStartupFailed, "FW startup failed.");
+
+ User::Panic( KAIFWStartupFailed, 0 );
+ }
+ else
+ {
+ // Secondary UI controller failed, delete it
+ delete uiCtl;
+ uiCtl = NULL;
+
+ iUiControllerArray.Remove( i );
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::CoeEnv()
+// ----------------------------------------------------------------------------
+//
+CCoeEnv& CAiUiControllerManager::CoeEnv() const
+ {
+ return iMainUiController->CoeEnv();
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::MainUiController()
+// ----------------------------------------------------------------------------
+//
+MAiMainUiController& CAiUiControllerManager::MainUiController() const
+ {
+ return *iMainUiController;
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::DestroySecondaryUiControllers()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::DestroySecondaryUiControllers()
+ {
+ for( TInt i = iUiControllerArray.Count() - 1; i >= 0; --i )
+ {
+ CAiUiController* uiController = iUiControllerArray[i];
+
+ if( !IsMainUiController( *uiController ) )
+ {
+ delete uiController;
+ uiController = NULL;
+
+ iUiControllerArray.Remove(i);
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::ExitMainController()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::ExitMainController()
+ {
+ iMainUiController->Exit();
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::AddObserverL()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::AddObserverL(
+ MAiUiFrameworkObserver& aUiFwObserver )
+ {
+ User::LeaveIfError(
+ iUiFrameworkObservers.InsertInAddressOrder( &aUiFwObserver ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::RemoveObserver()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::RemoveObserver(
+ MAiUiFrameworkObserver& aUiFwObserver )
+ {
+ TInt index( iUiFrameworkObservers.FindInAddressOrder( &aUiFwObserver ) );
+
+ if( index != KErrNotFound )
+ {
+ iUiFrameworkObservers.Remove( index );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::RemovePluginFromUI()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::RemovePluginFromUI( CAiContentPublisher& aPlugin )
+ {
+ // Get MAiPropertyExtension from plugin
+ MAiPropertyExtension* plugin =
+ static_cast< MAiPropertyExtension* >(
+ aPlugin.Extension( KExtensionUidProperty ) );
+
+ // Inform all UI controller that this plugin need to be removed from UI.
+ if( plugin )
+ {
+ for ( TInt i = 0; i < iUiControllerArray.Count(); i++ )
+ {
+ iUiControllerArray[i]->RemovePluginFromUI( *plugin );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::HandleResourceChange()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::HandleResourceChange( TInt aType )
+ {
+ for( TInt i = 0; i < iUiFrameworkObservers.Count(); i++ )
+ {
+ iUiFrameworkObservers[i]->HandleResourceChange( aType );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CAiUiControllerManager::HandleForegroundEvent()
+// ----------------------------------------------------------------------------
+//
+void CAiUiControllerManager::HandleForegroundEvent( TBool aForeground )
+ {
+ for( TInt i = 0; i < iUiFrameworkObservers.Count(); i++ )
+ {
+ iUiFrameworkObservers[i]->HandleForegroundEvent( aForeground );
+ }
+ }
+
+// End of file