diff -r 000000000000 -r 2f259fa3e83a uifw/AknGlobalUI/AknCapServer/inc/AknCapServerShutdown.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AknGlobalUI/AknCapServer/inc/AknCapServerShutdown.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2005-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: Handles shutdown situation. +* +*/ + +#ifndef AKNCAPSERVERSHUTDOWN_H +#define AKNCAPSERVERSHUTDOWN_H + +#include + +class TApaTask; +class RWsSession; + +class CAknCapServerShutdown : public CBase + { +public: + CAknCapServerShutdown(); + ~CAknCapServerShutdown(); + void ConstructL(); + + void ShutdownAppsL(const TUid aRequesterUID, const RMessage2& aShutdownMessage, + const TInt aTimeoutInMicroseconds); + + void CancelShutdownAppsL(); + +private: + enum TAknCapServerShutdownState + { + EShutdownWaitingForApps = 0, + EShutdownKillingRogueApps + }; + + // Exits / kills a running task & notifies when complete. + class CAppExitNotifier : public CActive + { + public: + enum TAppExitMethod + { + EAppExitNormal, + EAppExitForced + }; + + public: // Constructors and destructor + static CAppExitNotifier* NewL(TApaTask* aTask, CAknCapServerShutdown* aObserver); + ~CAppExitNotifier(); + void ExitTask(); // The nice way, exits a task cleanly. + void KillTask(); // The nasty way, kills a task. For use when ExitTask doesn't work. + TBool IsDead(); + const TApaTask& Task() const; + const TThreadId ThreadId() const; + + private: + void ConstructL(); + void RunL(); + void DoCancel(); + CAppExitNotifier(TApaTask* aTask, CAknCapServerShutdown* aObserver); + + private: // Data + CAknCapServerShutdown* iObserver; // Pointer to CAknCapServerShutdown for callbacks. + TBool iIsDead; // Flag indicating the status of the thread. + TApaTask* iTask; // Task being exited. + RThread iThread; // iTask's thread. + TThreadId iThreadId; // iTask's threadID. + TAppExitMethod iExitMethod; // How the app is closed. + }; +public: + void AppExitNotifierL(const CAppExitNotifier* aNotifier, + CAppExitNotifier::TAppExitMethod aHowClosed); + +private: + static TInt ShutdownTimeoutL(TAny* aPtr); + TInt DoShutdownTimeoutL(); + void ProceedWithShutdown(); + +private: + RMessagePtr2 iShutdownMessage; + CArrayPtrFlat* iAppExitNotifiers; + TInt iTotalAppExitNotifiers; + CPeriodic* iShutdownTimeout; + TAknCapServerShutdownState iShutdownState; + RWsSession& iWs; + }; + +#endif // AKNCAPSERVERSHUTDOWN_H