diff -r c743ef5928ba -r f966699dea19 idlehomescreen/xmluicontroller/src/appui.cpp --- a/idlehomescreen/xmluicontroller/src/appui.cpp Tue Feb 02 00:04:13 2010 +0200 +++ b/idlehomescreen/xmluicontroller/src/appui.cpp Fri Feb 19 22:42:37 2010 +0200 @@ -25,20 +25,21 @@ #include // User includes +#include +#include #include #include +#include #include #include "appui.h" #include "application.h" #include "xmluicontroller.h" #include "aixuikoneventhandler.h" -#include "aiuiframeworkobserver.h" #include "aixmluiconstants.h" #include "contentrenderer.h" #include "psobserver.h" -#include "aipropertyextension.h" #include "aicontentmodel.h" #include "aiuiidleintegration.h" #include "xmluicontrollerpanic.h" @@ -49,6 +50,11 @@ #include "xnproperty.h" #include "xnuiengineappif.h" #include "onlineofflinehelper.h" +#include "ainativeuiplugins.h" + +// Constants +// EAiDeviceStatusContentNetworkIdentity content id +_LIT( KNetworkIdentity, "NetworkIdentity" ); using namespace AiXmlUiController; @@ -72,29 +78,28 @@ AI3_PERF_START(perfdata, "xmluicontroller: CAppUi::ConstructL") // Always reset the phoneforward P&S key on startup just in case - RProperty::Set(KPSUidAiInformation, - KActiveIdleForwardNumericKeysToPhone, - EPSAiForwardNumericKeysToPhone); - + RProperty::Set( KPSUidAiInformation, + KActiveIdleForwardNumericKeysToPhone, EPSAiForwardNumericKeysToPhone ); + // Initialize with empty title pane so it's not shown on startup. __HEAP("XML UI: Init - Construct App UI") __TIME("XML UI: XnAppUiAdapted::ConstructL", CXnAppUiAdapter::ConstructL(); ) - + // Register for XML UI view activation & deactivation AddViewActivationObserverL( this ); // Disable CCoeEnv exit checks. // Active Idle Framework will perform the checks. - iCoeEnv->DisableExitChecks(ETrue); + iCoeEnv->DisableExitChecks( ETrue ); __TIME("XML UI: Construct Content Renderer", iContentRenderer = CContentRenderer::NewL( *this ); ) __HEAP("XML UI: Construct Content Renderer"); - TXnUiEngineAppIf* uiEngine = UiEngineL(); + TXnUiEngineAppIf* uiEngine( UiEngineL() ); __ASSERT_ALWAYS( uiEngine, Panic(ECriticalPointerNull) ); iUiCtl.SetObserver( *iContentRenderer ); @@ -104,29 +109,30 @@ iUiCtl.SetAppUi( *this ); iEventHandler = iUiCtl.CreateXuikonEventHandlerL( *iContentRenderer ); - - iUiFwObserver = iUiCtl.UiFrameworkObserver(); - + TAiIdleKeySoundConfig keySoundConfig; keySoundConfig.iKeySounds = KeySounds(); keySoundConfig.iContextResId = R_XUI_DEFAULT_SKEY_LIST; iIdleIntegration = CAiUiIdleIntegration::NewL ( *iEikonEnv, keySoundConfig, iUiCtl.FwEventHandler() ); - + + iUiCtl.NotifyAppEnvReadyL(); + + CAknAppUiBase::SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | + CAknAppUiBase::EDisableSendKeyLong ); + iHelper = COnlineOfflineHelper::NewL( iUiCtl ); - iUiCtl.NotifyAppEnvReadyL(); + // Load device status plugin here because it is always needed + iDeviceStatusInfo = THsPublisherInfo( KDeviceStatusPluginUid, + KDeviceStatusPluginName, KNullDesC8 ); + + iUiCtl.FwStateHandler()->LoadPlugin( + iDeviceStatusInfo, EAiFwSystemStartup ); - LoadNativeDataPluginsL(); - - CAknAppUiBase::SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | - CAknAppUiBase::EDisableSendKeyLong ); + __HEAP("XML UI: Done - Construct App UI"); - iIsEditModeActive = EFalse; - - - __HEAP("XML UI: Done - Construct App UI"); AI3_PERF_STOP(perfdata, "xmluicontroller: CAppUi::ConstructL") } @@ -161,26 +167,16 @@ // void CAppUi::PrepareToExit() { + iUiShutdown = ETrue; + + RemoveViewActivationObserver( this ); + iUiCtl.FwEventHandler()->HandleUiShutdown( iUiCtl ); CXnAppUiAdapter::PrepareToExit(); } // ---------------------------------------------------------------------------- -// CAppUi::HandleForegroundEventL() -// ---------------------------------------------------------------------------- -// -void CAppUi::HandleForegroundEventL( TBool aForeground ) - { - CXnAppUiAdapter::HandleForegroundEventL( aForeground ); - - if( iUiFwObserver ) - { - iUiFwObserver->HandleForegroundEvent( aForeground ); - } - } - -// ---------------------------------------------------------------------------- // CAppUi::HandleCommandL() // ---------------------------------------------------------------------------- // @@ -210,20 +206,6 @@ } // ---------------------------------------------------------------------------- -// CAppUi::HandleResourceChangeL() -// ---------------------------------------------------------------------------- -// -void CAppUi::HandleResourceChangeL( TInt aType ) - { - CXnAppUiAdapter::HandleResourceChangeL( aType ); - - if( iUiFwObserver ) - { - iUiFwObserver->HandleResourceChange( aType ); - } - } - -// ---------------------------------------------------------------------------- // CAppUi::HandleWsEventL() // ---------------------------------------------------------------------------- // @@ -279,92 +261,70 @@ { __TIME("UC: Event Management", iEventHandler->HandleXuikonEventL( aOrigin, - aTrigger, - aTriggerDefinition, - aEvent ); - ); + aTrigger, aTriggerDefinition, aEvent ) ); } __PRINTS("*** UI: Done - Event Management"); } + +// ---------------------------------------------------------------------------- +// CAppUi::HandleEventL() +// ---------------------------------------------------------------------------- +// +void CAppUi::HandleEventL( const TDesC& aEvent, CXnNodeAppIf& aDestination ) + { + THsPublisherInfo info; + iUiCtl.PublisherInfoL( aDestination, info ); + + iUiCtl.FwEventHandler()->HandlePluginEventL( info, aEvent ); + } + // ---------------------------------------------------------------------------- // CAppUi::LoadDataPluginsL() // ---------------------------------------------------------------------------- // -void CAppUi::LoadDataPluginsL( RPointerArray< CXnNodeAppIf >& aList ) +TInt CAppUi::LoadPublisher( CXnNodeAppIf& aPublisher, TInt aReason ) { - for( TInt i = 0; i < aList.Count(); i++ ) + if ( iUiShutdown ) { - TAiPublisherInfo info; - - iUiCtl.PublisherInfoL( *aList[i], info ); - - iUiCtl.FwEventHandler()->HandleLoadPluginL( info ); + // Framework has already destroyed all publishers + return KErrNone; } - } + + THsPublisherInfo info; + + TRAP_IGNORE( iUiCtl.PublisherInfoL( aPublisher, info ) ); -// ---------------------------------------------------------------------------- -// CAppUi::LoadNativeDataPluginsL() -// ---------------------------------------------------------------------------- -// -void CAppUi::LoadNativeDataPluginsL() - { - if ( !iNativePluginsLoaded ) + if ( info.Uid() == KDeviceStatusPluginUid ) { - RAiPublisherInfoArray plugins; - CleanupClosePushL( plugins ); - - iUiCtl.PublisherInfoL( plugins ); - - for ( TInt i = 0; i < plugins.Count(); i++ ) - { - iUiCtl.FwEventHandler()->HandleLoadPluginL( plugins[i] ); - } - - CleanupStack::PopAndDestroy( &plugins ); - - iNativePluginsLoaded = ETrue; - } + // Update device status info + iDeviceStatusInfo = info; + } + + return iUiCtl.FwStateHandler()->LoadPlugin( + info, (TAiFwLoadReason) aReason ); } // ---------------------------------------------------------------------------- -// CAppUi::DestroyDataPluginsL() -// ---------------------------------------------------------------------------- -// -void CAppUi::DestroyDataPluginsL( RPointerArray< CXnNodeAppIf >& aList ) - { - for( TInt i = 0; i < aList.Count(); i++ ) - { - TAiPublisherInfo info; - - iUiCtl.PublisherInfoL( *aList[i], info ); - - iUiCtl.FwEventHandler()->HandleDestroyPluginL( info ); - } - } - -// ---------------------------------------------------------------------------- -// CAppUi::DestroyNativeDataPluginsL() +// CAppUi::DestroyPublisher() // ---------------------------------------------------------------------------- // -void CAppUi::DestroyNativeDataPluginsL() +TInt CAppUi::DestroyPublisher( CXnNodeAppIf& aPublisher, TInt aReason ) { - if ( iNativePluginsLoaded ) - { - RAiPublisherInfoArray plugins; - CleanupClosePushL( plugins ); - - iUiCtl.PublisherInfoL( plugins ); - - for ( TInt i = 0; i < plugins.Count(); i++ ) - { - iUiCtl.FwEventHandler()->HandleDestroyPluginL( plugins[i] ); - } - - CleanupStack::PopAndDestroy( &plugins ); - - iNativePluginsLoaded = EFalse; + if ( iUiShutdown ) + { + // Framework has already destroyed all publishers + return KErrNone; } + + THsPublisherInfo info; + + TRAP_IGNORE( iUiCtl.PublisherInfoL( aPublisher, info ) ); + + iUiCtl.FwStateHandler()->DestroyPlugin( + info, (TAiFwDestroyReason) aReason ); + + return KErrNone; } // ---------------------------------------------------------------------------- @@ -374,6 +334,12 @@ TBool CAppUi::DynInitMenuItemL( const TDesC& aItemType, RPointerArray< CXnNodeAppIf >* aList ) { + if ( iUiShutdown ) + { + // Framework has already destroyed all publishers + return EFalse; + } + _LIT( KOnline, "hs_online" ); _LIT( KOffline, "hs_offline" ); @@ -393,7 +359,7 @@ for( TInt i = 0; !retval && i < list.Count(); i++ ) { - TAiPublisherInfo info; + THsPublisherInfo info; iUiCtl.PublisherInfoL( *list[i], info ); @@ -406,48 +372,14 @@ // ---------------------------------------------------------------------------- // CAppUi::SetOnlineStateL() -// Called always by view manager when view is activated. -// ---------------------------------------------------------------------------- -// -void CAppUi::SetOnlineStateL( RPointerArray< CXnNodeAppIf >& aList ) - { - iHelper->ProcessOnlineStateL( aList ); - } - -// ---------------------------------------------------------------------------- -// CAppUi::SetOnlineL() // Called always when user changed HS online/offline status from option menu. // ---------------------------------------------------------------------------- // void CAppUi::SetOnlineStateL( TBool aOnline ) { - iHelper->ProcessOnlineStateL( aOnline ); - } - -// ---------------------------------------------------------------------------- -// CAppUi::HandleViewActivation() -// ---------------------------------------------------------------------------- -// -void CAppUi::HandleViewActivation( const TVwsViewId& aNewlyActivatedViewId, - const TVwsViewId& aViewIdToBeDeactivated ) - { - if ( iIsEditModeActive ) + if ( !iUiShutdown ) { - return; - } - - // Get Xml Ui view id - TVwsViewId viewId( View().ViewId() ); - - if ( viewId == aNewlyActivatedViewId ) - { - // Xml Ui view became active - TRAP_IGNORE( LoadNativeDataPluginsL() ); - } - else if ( viewId == aViewIdToBeDeactivated ) - { - // Xml Ui view became inactive - TRAP_IGNORE( DestroyNativeDataPluginsL() ); + iHelper->ProcessOnlineStateL( aOnline ); } } @@ -461,12 +393,12 @@ } // ---------------------------------------------------------------------------- -// CAppUi::HandlePageSwitch() +// CAppUi::Helper() // ---------------------------------------------------------------------------- // -void CAppUi::HandlePageSwitch() +COnlineOfflineHelper* CAppUi::Helper() const { - iUiCtl.FwEventHandler()->ProcessStateChange( EAifwPageSwitch ); + return iHelper; } // ---------------------------------------------------------------------------- @@ -475,16 +407,54 @@ // void CAppUi::HandleEnterEditModeL( TBool aEnter ) { - if ( aEnter ) + if ( iInEditMode != aEnter ) { - DestroyNativeDataPluginsL(); - iIsEditModeActive = ETrue; - } - else - { - LoadNativeDataPluginsL(); - iIsEditModeActive = EFalse; - } + if ( aEnter ) + { + iUiCtl.FwEventHandler()->SuspendContent( + iDeviceStatusInfo, KNetworkIdentity ); + } + else + { + iUiCtl.FwEventHandler()->RefreshContent( + iDeviceStatusInfo, KNetworkIdentity ); + } + + iInEditMode = aEnter; + } } +// ---------------------------------------------------------------------------- +// CAppUi::HandleViewActivation() +// ---------------------------------------------------------------------------- +// +void CAppUi::HandleViewActivation( const TVwsViewId& aNewlyActivatedViewId, + const TVwsViewId& aViewIdToBeDeactivated ) + { + TVwsViewId activeViewId; + + TInt err( GetActiveViewId( activeViewId ) ); + + if ( iInEditMode || err == KErrNotFound ) + { + return; + } + + // Get Xml Ui view id + TVwsViewId xmlViewId( View().ViewId() ); + + if ( xmlViewId == aNewlyActivatedViewId && activeViewId != xmlViewId ) + { + // Xml Ui view became active + iUiCtl.FwEventHandler()->RefreshContent( + iDeviceStatusInfo, KNetworkIdentity ); + } + else if ( xmlViewId == aViewIdToBeDeactivated && activeViewId == xmlViewId ) + { + // Xml Ui view became inactive + iUiCtl.FwEventHandler()->SuspendContent( + iDeviceStatusInfo, KNetworkIdentity ); + } + } + // End of File.