--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/SysApStartupController.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,255 @@
+/*
+* 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: CSysApStartupController implementation.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <startupdomainpskeys.h>
+#include <startupdomaincrkeys.h>
+#include "CoreApplicationUIsPrivateCRKeys.h"
+#include <hwrmpowerstatesdkpskeys.h>
+#include "SysApStartupController.h"
+#include "SysApAppUi.h"
+#include "SysApSubscriber.h"
+#include "SysAp.hrh"
+
+//CONSTANTS
+
+// ========================== MEMBER FUNCTIONS ================================
+
+// ----------------------------------------------------------------------------
+// CSysApStartupController* CSysApStartupController::NewL()
+// ----------------------------------------------------------------------------
+
+CSysApStartupController* CSysApStartupController::NewL( CSysApAppUi& aSysApAppUi, TBool aOfflineModeSupported )
+ {
+ TRACES( RDebug::Print( _L("CSysApStartupController::NewL" ) ) );
+ CSysApStartupController* self = new ( ELeave ) CSysApStartupController( aSysApAppUi, aOfflineModeSupported );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(); //self
+ return self;
+ }
+
+#pragma warning( disable : 4355 ) // 'this' used in base member initializer list
+// ----------------------------------------------------------------------------
+// CSysApStartupController::CSysApStartupController( CSysApAppUi& aSysApAppUi )
+// ----------------------------------------------------------------------------
+
+CSysApStartupController::CSysApStartupController( CSysApAppUi& aSysApAppUi, TBool aOfflineModeSupported )
+ :
+ iSysApAppUi( aSysApAppUi ),
+ iOfflineModeSupported( aOfflineModeSupported ),
+ iFirstNormalState( ETrue ),
+ iSystemStateBeingNotified( EFalse ),
+ iNotifiedGlobalState( 0 )
+#ifdef SYSAP_USE_STARTUP_UI_PHASE
+ , iStartupUiPhaseSubscriber( NULL ),
+ iStartupUiAllDoneHandled( EFalse ),
+ iStartupUiAllDone( EFalse )
+#endif // SYSAP_USE_STARTUP_UI_PHASE
+ {
+ TRACES( RDebug::Print( _L("CSysApStartupController::CSysApStartupController iOfflineModeSupported = %d" ), iOfflineModeSupported ) );
+ }
+#pragma warning( default : 4355 )
+
+// ----------------------------------------------------------------------------
+// CSysApStartupController::~CSysApStartupController()
+// ----------------------------------------------------------------------------
+
+CSysApStartupController::~CSysApStartupController()
+ {
+ TRACES( RDebug::Print( _L("~CSysApStartupController") ) );
+ delete iGlobalSystemState;
+
+#ifdef SYSAP_USE_STARTUP_UI_PHASE
+ delete iStartupUiPhaseSubscriber;
+#endif // SYSAP_USE_STARTUP_UI_PHASE
+ }
+
+// ----------------------------------------------------------------------------
+// CSysApStartupController::ConstructL()
+// ----------------------------------------------------------------------------
+
+void CSysApStartupController::ConstructL( )
+ {
+ iGlobalSystemState = CSysApSubscriber::NewL( *this, KPSUidStartup, KPSGlobalSystemState ); // Old Shared Data name: KStateValueKey
+ iGlobalSystemState->Subscribe();
+
+#ifdef SYSAP_USE_STARTUP_UI_PHASE
+ iStartupUiPhaseSubscriber = CSysApSubscriber::NewL( *this, KPSUidStartup, KPSStartupUiPhase );
+ iStartupUiPhaseSubscriber->Subscribe();
+#endif // SYSAP_USE_STARTUP_UI_PHASE
+ }
+
+// ----------------------------------------------------------------------------
+// CSysApStartupController::HandlePropertyChangedL
+// ----------------------------------------------------------------------------
+
+void CSysApStartupController::HandlePropertyChangedL( const TUid& aCategory, const TUint aKey )
+ {
+ TInt value( iSysApAppUi.StateOfProperty( aCategory, aKey ) );
+
+ TRACES( RDebug::Print( _L("CSysApStartupController::HandlePropertyChangedL: aCategory=0x%x, aKey=%d, value=%d" ),
+ aCategory, aKey, value ) );
+
+
+ if ( iSysApAppUi.ResourcesFreed() )
+ {
+ TRACES( RDebug::Print( _L( "CSysApStartupController::HandlePropertyChangedL: discarded, already shutting down" ) ) );
+ return;
+ }
+
+ if ( aKey == KPSGlobalSystemState )
+ {
+ iSystemStateBeingNotified = ETrue;
+ iNotifiedGlobalState = value;
+ TRAPD( err, HandleGlobalSystemStateChangeL( value ) );
+ iSystemStateBeingNotified = EFalse;
+ if ( err != KErrNone )
+ {
+ TRACES( RDebug::Print( _L("CSysApStartupController::HandlePropertyChangedL: err=%d"), err ) );
+ }
+ User::LeaveIfError( err );
+
+ }
+
+#ifdef SYSAP_USE_STARTUP_UI_PHASE
+ if ( aKey == KPSStartupUiPhase && value == EStartupUiPhaseAllDone && !iStartupUiAllDoneHandled )
+ {
+ iStartupUiAllDoneHandled = ETrue;
+ iStartupUiAllDone = ETrue;
+ iSysApAppUi.HandleUiReadyAfterBootL();
+ }
+#endif // SYSAP_USE_STARTUP_UI_PHASE
+ }
+
+// ----------------------------------------------------------------------------
+// CSysApStartupController::DoInitialSwStateCheckL()
+// ----------------------------------------------------------------------------
+
+void CSysApStartupController::DoInitialSwStateCheckL()
+ {
+ TRACES( RDebug::Print( _L( "CSysApStartupController::DoInitialSwStateCheckL : START" ) ) );
+
+ HandlePropertyChangedL( KPSUidStartup, KPSGlobalSystemState );
+
+#ifdef SYSAP_USE_STARTUP_UI_PHASE
+ HandlePropertyChangedL( KPSUidStartup, KPSStartupUiPhase );
+#endif // SYSAP_USE_STARTUP_UI_PHASE
+
+ TRACES( RDebug::Print( _L( "CSysApStartupController::DoInitialSwStateCheckL : END" ) ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CSysApStartupController::HandleGlobalSystemStateChangeL
+// ----------------------------------------------------------------------------
+
+void CSysApStartupController::HandleGlobalSystemStateChangeL( TInt aValue )
+ {
+ TBool normalState(EFalse);
+
+ switch ( aValue )
+ {
+ case ESwStateNormalRfOn:
+ normalState = ETrue;
+ if ( iOfflineModeSupported && (iSysApAppUi.OfflineModeActive() || iFirstNormalState) )
+ {
+ TBool changeProfile = ETrue;
+
+ // during boot, allow profile change only if switching from offline to online state
+ if ( iFirstNormalState && !iSysApAppUi.OfflineModeActive() )
+ {
+ changeProfile = EFalse;
+ }
+
+ // Offline/Online mode changed by some other application (or boot)
+ iSysApAppUi.GoOnlineL( changeProfile );
+ }
+
+ break;
+ case ESwStateNormalRfOff:
+ normalState = ETrue;
+ if ( iOfflineModeSupported && (!iSysApAppUi.OfflineModeActive() || iFirstNormalState) )
+ {
+ // Offline/Online mode changed by some other application (or boot)
+ iSysApAppUi.GoOfflineL();
+ }
+ break;
+ case ESwStateNormalBTSap:
+ // This mode can conceivably only be set by SysAp, so ignore.
+ break;
+ case ESwStateCharging:
+ iSysApAppUi.DoStateChangedL(RStarterSession::ECharging);
+ break;
+ case ESwStateAlarm:
+ iSysApAppUi.DoStateChangedL(RStarterSession::EAlarm);
+ break;
+#ifdef SYSAP_USE_STARTUP_UI_PHASE
+ case ESwStateEmergencyCallsOnly:
+ // idle state UI initializations are not allowed
+ iStartupUiAllDoneHandled = ETrue;
+ iStartupUiAllDone = EFalse;
+ break;
+#endif // SYSAP_USE_STARTUP_UI_PHASE
+ default:
+ break;
+ }
+
+ if ( iFirstNormalState && normalState )
+ {
+ iSysApAppUi.DoStateChangedL(RStarterSession::ENormal);
+ User::ResetInactivityTime();
+ iFirstNormalState = EFalse;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CSysApStartupController::GlobalStateChangeAllowed()
+// ----------------------------------------------------------------------------
+
+TBool CSysApStartupController::GlobalStateChangeAllowed( const RStarterSession::TGlobalState aState ) const
+ {
+ TRACES( RDebug::Print( _L( "CSysApStartupController::GlobalStateChangeAllowed : aState=%d, iSystemStateBeingNotified=%d, iNotifiedGlobalState=%d" ),
+ aState, iSystemStateBeingNotified, iNotifiedGlobalState ) );
+
+ // Redundant state changes are filtered out when a global state change is ongoing
+ if ( iSystemStateBeingNotified ) // KPSGlobalSystemState notification currently handled
+ {
+ if ( aState == RStarterSession::ENormal && iNotifiedGlobalState == ESwStateNormalRfOn
+ || aState == RStarterSession::EOffline && iNotifiedGlobalState == ESwStateNormalRfOff )
+ {
+ return EFalse;
+ }
+ }
+
+ return ETrue;
+ }
+
+#ifdef SYSAP_USE_STARTUP_UI_PHASE
+// ----------------------------------------------------------------------------
+// CSysApStartupController::UiReady()
+// ----------------------------------------------------------------------------
+
+TBool CSysApStartupController::UiReady() const
+ {
+ return iStartupUiAllDone;
+ }
+#endif // SYSAP_USE_STARTUP_UI_PHASE
+
+// End of File
+