--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/satengine/SatServer/Engine/src/CSatSUiClientHandler.cpp Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,364 @@
+/*
+* Copyright (c) 2002-2009 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: Handles some UI Client activity
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CSatSUiClientHandler.h"
+//lint -e766 Used inside TRAP macro, lint misfunction.
+#include "EnginePanic.h"
+#include "MSatSSessions.h"
+#include "MSatShellController.h"
+#include "CSatThreadDeathMonitor.h"
+#include "SatLog.h"
+#include "MSatUtils.h"
+#include "TSatEventMediator.h"
+
+// CONSTANTS
+_LIT( KShellControllerDll, "SatShellCntrl.dll" ); // ShellController dll
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::CSatSUiClientHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSatSUiClientHandler::CSatSUiClientHandler(
+ MSatSSessions& aSessions,
+ TSatEventMediator& aEventMediator ) :
+ iSessions( aSessions ),
+ iEventMediator( aEventMediator ),
+ iUiLaunchedByUser( EFalse ),
+ iSatUiClosing( EFalse ),
+ iLaunchSatUiAfterClose( EFalse ),
+ iSatUiPanicked( EFalse )
+ {
+ LOG( SIMPLE, "SATENGINE: \
+ CSatSUiClientHandler::CSatSUiClientHandler calling - exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::ConstructL()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ConstructL calling" )
+
+ // Create thread death monitor
+ iThreadDeathMonitor = CSatThreadDeathMonitor::NewL();
+
+ iEventMediator.RegisterL( this, MSatUtils::ESatUiLaunched );
+ iEventMediator.RegisterL( this, MSatUtils::EBringSatUiToForeGround );
+
+ // Load SatShellController
+ // Create the UI handler instance
+ User::LeaveIfError( iSatShellCntrlLibrary.Load( KShellControllerDll ) );
+
+ // creating the class...
+ TLibraryFunction uiControllerFactory = iSatShellCntrlLibrary.Lookup( 1 );
+
+ iSatShellCntrl =
+ reinterpret_cast<MSatShellController*>( uiControllerFactory() );
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ConstructL exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSatSUiClientHandler* CSatSUiClientHandler::NewL(
+ MSatSSessions& aSessions,
+ TSatEventMediator& aEventMediator )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::NewL calling" )
+
+ CSatSUiClientHandler* self =
+ new( ELeave ) CSatSUiClientHandler( aSessions, aEventMediator );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::NewL exiting" )
+ return self;
+ }
+
+
+// Destructor
+CSatSUiClientHandler::~CSatSUiClientHandler()
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSUiClientHandler::~CSatSUiClientHandler calling" )
+
+ iUtils = NULL;
+ delete iSatShellCntrl;
+ delete iThreadDeathMonitor;
+ iSatShellCntrlLibrary.Close();
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSUiClientHandler::~CSatSUiClientHandler exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::SetUtils
+// Sets Sat Utils interface
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::SetUtils( MSatUtils* aUtils )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::SetUtils calling" )
+
+ iUtils = aUtils;
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::SetUtils exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::ThreadDiedL
+// Notification from Thread death monitor
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::ThreadDiedL()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ThreadDiedL calling" )
+
+ // Sat UI Thread has died.
+ iSatUiClosing = EFalse;
+ iUiLaunchedByUser = EFalse;
+
+ // Check is there LaunchUi request active.
+ if ( iLaunchSatUiAfterClose )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ThreadDiedL \
+ iLaunchSatUiAfterClose true" )
+ iLaunchSatUiAfterClose = EFalse;
+ LaunchSatUiL();
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ThreadDiedL exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::ThreadPanicedL
+// Notification from Thread death monitor
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::ThreadPanicedL()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ThreadDiedL calling" )
+
+ iSatUiPanicked = ETrue;
+ ThreadDiedL();
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ThreadDiedL exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::Event
+// Event notified
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::Event( TInt aEvent )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::Event calling" )
+
+ //lint -e{961} Other events do not need to be handled here
+ if ( MSatUtils::ESatUiLaunched == aEvent )
+ {
+ iSatUiPanicked = EFalse;
+ // Ui is not launced by user, if there are executing commands when
+ // ui launch event has arrived.
+ const TInt activeCommands( iUtils->NumberOfExecutingCommandHandlers() );
+ LOG2( SIMPLE, "SATENGINE: CSatSUiClientHandler::Event \
+ activeCommands: %i", activeCommands )
+ if ( activeCommands > 0 )
+ {
+ iUiLaunchedByUser = EFalse;
+ // Bring to foreground. This will complete the SAT UI cosntruction.
+ ShellController().BringSatUiToForeground();
+ }
+ else
+ {
+ iUiLaunchedByUser = ETrue;
+ }
+ }
+ else if ( MSatUtils::EBringSatUiToForeGround == aEvent )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::Event bring SAT UI \
+ to foreground" )
+ // If UI is not launched by user, bring SAT UI to foreground when
+ // needed.
+ if ( !iUiLaunchedByUser )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::Event \
+ iUiLaunchedByUser false" )
+ ShellController().BringSatUiToForeground();
+ }
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::Event exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::NotifyThreadDeath
+// Notifies Thread death monitor
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::NotifyThreadDeath()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::NotifyThreadDeath calling" )
+
+ iSatUiClosing = ETrue;
+ iUiLaunchedByUser = EFalse;
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::NotifyThreadDeath exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::StartObservingThread
+// Notifies Thread death monitor
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::StartObservingThread()
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSUiClientHandler::StartObservingThread calling" )
+
+ TInt err( KErrNone );
+ TRAP( err, iThreadDeathMonitor->NotifyThreadDeathL( iThread, *this ) );
+ if ( KErrNone != err )
+ {
+ LOG2( NORMAL, "SATENGINE: \
+ CSatSUiClientHandler::NotifyThreadDeath error: %i", err )
+ iThreadDeathMonitor->Cancel();
+ }
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSUiClientHandler::StartObservingThread exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::SetObserveredThread
+// Notifies Thread death monitor
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::SetObserveredThread( TThreadId& aThreadId )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSUiClientHandler::SetObserveredThread calling" )
+
+ iThread = aThreadId;
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSUiClientHandler::SetObserveredThread exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::UiSession
+// Returns UI session
+// -----------------------------------------------------------------------------
+//
+MSatUiSession* CSatSUiClientHandler::UiSession()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::UiSession calling" )
+
+ MSatUiSession* session = NULL;
+
+ // If SAT UI is closing, return null, even if session is not null
+ if ( !iSatUiClosing && !iSatUiPanicked )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::UiSession session \
+ not null" )
+ session = iSessions.UiSession();
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::UiSession exiting" )
+ return session;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::LaunchSatUiL
+// Launches Sat UI
+// -----------------------------------------------------------------------------
+//
+void CSatSUiClientHandler::LaunchSatUiL()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::LaunchSatUiL calling" )
+
+ // If ui client application is closing, we have to wait for the
+ // closing and launch ui client after it.
+ if ( iSatUiClosing )
+ {
+ LOG( NORMAL, "SATENGINE: CSatSUiClientHandler::LaunchSatUiL \
+ UI IS CLOSING DOWN -> WAIT UI THREAD DEATH" )
+ iLaunchSatUiAfterClose = ETrue;
+ }
+ else
+ {
+ LOG( NORMAL, "SATENGINE: CSatSUiClientHandler::LaunchSatUiL \
+ LAUNCHING SAT UI" )
+ ShellController().LaunchSatUiL();
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::LaunchSatUiL exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::UiLaunchedByUser
+// Is UI Launched by user
+// -----------------------------------------------------------------------------
+//
+TBool CSatSUiClientHandler::UiLaunchedByUser()
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSUiClientHandler::UiLaunchedByUser calling - exiting" )
+ return iUiLaunchedByUser;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::ShellController
+// Returns SatShellController from UI side
+// -----------------------------------------------------------------------------
+//
+MSatShellController& CSatSUiClientHandler::ShellController()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ShellController calling" )
+
+ __ASSERT_ALWAYS( iSatShellCntrl, PanicSatEngine( ESatEngineNullPointer ) );
+
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::ShellController exiting" )
+ return *iSatShellCntrl;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSUiClientHandler::ShellController
+// Returns SatShellController from UI side
+// -----------------------------------------------------------------------------
+//
+TBool CSatSUiClientHandler::IsUiClosing() const
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSUiClientHandler::IsUiClosing call - exit" )
+ return iSatUiClosing;
+ }
+
+// End of File