diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/wsserverdrawercontroller.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/wsserverdrawercontroller.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,253 @@ +/* +* Copyright (c) 2006 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: window server plugin, used by transition server to control +* framebuffers. +* +*/ + + + +#ifndef SERVERDRAWERCONTROLLER_H +#define SERVERDRAWERCONTROLLER_H + +#include +#include +#ifdef WSSERVERDRAWER_TIME_LOG +#include "debuglogger.h" +#endif //WSSERVERDRAWER_TIME_LOG + +#include "statehandler.h" + +class MAlfDrawerEngine; +class CAppInfoCache; +class CEndCheck; +class CPSListener; + +enum TAbortFlags + { + EAbortFullscreen = 0x1, + EAbortControl = 0x2, + }; + +const TUint KAknApplicationShellViewId= 0x101F4CD2; +const TUint KCapServerUid = 0x10207218; +const TUint KScreensaverUid = 0x100056CF; + +NONSHARABLE_CLASS(MEndChecker) + { + public: + virtual void EndExpired() = 0; + }; + +class CEndCheck : public CTimer + { + public: + static CEndCheck* NewL(MEndChecker& aCallBack); + void Start(/*TInt aState,*/ TInt aMul = 1); + ~CEndCheck(); + private: + void RunL(); + CEndCheck(MEndChecker& aCallBack); + void DoCancel(); + private: + MEndChecker& iCallBack; + TBool iCancelled; + }; + +/** + * Class to hold application information. + */ +class CAppInfoCache : public CBase + { + public: + static CAppInfoCache* NewL(); + ~CAppInfoCache(); + TInt SetUid(const TUid& aUid); + void SetAvkonUid(const TUid& aUid); + void RemoveAvkonUid(const TUid& aUid); + TBool AvkonUid(const TUid& aUid) const; + TBool GateFound() const; + void Reset(const TUid& aUid); + TBool IsEmbedded(const TUid& aUid) const; + void SetParent(const TUid& aUid, const TUid& aParentUid); + TInt SetAction(const TUid& aUid, TInt aAction); + TInt Action(const TUid& aUid); + TBool IsSameParent(const TUid& aUid1, const TUid& aUid2) const; + + const TUid& FocusUid() const; + TBool SetFocusUid(TInt aWgId); + + void ClearActions(); + + private: + class TAppInfo + { + public: + static TInt Order(const TAppInfo& aNodeA, const TAppInfo& aNodeB); + TAppInfo(const TUint aUid) : + iUid(aUid), + iFlags(TAppInfo::ENone), + iParent(KNullUid), + iAction(KErrNotFound) + {} + enum TFlags + { + ENone = 0x0, + EAvkonApp = 0x1, + ENotOkApp = 0x4 + }; + TUint iUid; + TUint iFlags; + TUid iParent; + TInt iRootWgId; + TInt iAction; + }; + private: + void ConstructL(); + void ImportL(); + void ExportL(); + TInt Append(TUint aUid); + TInt IndexOf(TUint aUid) const; + void ReadArrayL(RFile& aFile); + void WriteArrayL(RFile& aFile) const; + void SetAppFlags(const TUid& aUid, TUint aFlag, TBool aSet); + TBool GetAppFlags(const TUid& aUid, TUint aFlag) const; + private: + RApaLsSession iLs; + RArray iAppInfo; + TUid iFocusedUid; + }; + +NONSHARABLE_CLASS(CWsServerDrawerController) : public CBase, public MEndChecker + { +public: + /** errors that the wsserverdrawer can inform the controller about through + the Error function */ + enum TServerDrawerError + { + EHandleMessageError + }; + + /** + */ + static CWsServerDrawerController* NewL(MAlfDrawerEngine* aEngine); + + /** + */ + ~CWsServerDrawerController(); + + /** + */ + void BeginFullscreen(TInt aType, const TUid aUid1, const TUid aUid2, TInt aData ); + + /** + */ + void EndFullscreen(TBool aFromGfx); + + /** + */ + void FullscreenFinished(TInt aHandle); + + /** + */ + TInt BeginControlTransition(); + + /** + */ + void EndControlTransition(TInt aHandle); + + /** + */ + void ScreenModeChange(TBool aBeforeScreenModeChange); + + /** + */ + void Error(TServerDrawerError aError); + + /** + */ + void DSABegin(); + /** + */ + void DSAEnd(); + + + /** + * Stops the oncoming and current transition and sets + * the state machine the resting state. + */ + void AbortTransition(TInt aToAbort = EAbortFullscreen|EAbortControl); + + + const TUid& FocusUid(); + + TBool SetFocusUid(TInt aUid); + + void StartEndChecker(TInt aMultiplier = 1); + + void CancelEndChecker(); + /** + */ + void EndExpired(); + + /** Saves the current Engine action and Uids */ + void SaveLastActionAndUid(); + + TInt GetState( TInt aState ) const; + + TBool IsBlocked( const TUid& aFromUid, const TUid& aToUid ); + +public: + + CAppInfoCache& AppInfoCache() + { + return *iAppInfoCache; + } + +private: + + /** + */ + CWsServerDrawerController(MAlfDrawerEngine* aEngine); + + /** + */ + void ConstructL(); + + TBool StartCheck(TInt aFlags) const; + + void AddStateL(const TUid& aUid, TInt aKey); +private: + TUid iCurrentUid; + CAppInfoCache* iAppInfoCache; + CEndCheck* iEndCheck; + MAlfDrawerEngine* iEngine; //not owning + RPointerArray iPSStates; + CStateHandler::TFullscreenType iLastTypeTried; + TInt iLastAction; + TUid iLastFromUid; + TUid iLastToUid; + TBool iLayoutChangeActive; + TBool iExitAborted; + TBool iDSAActive; //ETrue if dsa is currently active + + CStateHandler* iStates; + +#ifdef WSSERVERDRAWER_TIME_LOG + CDebugLogger *iLogger; +#endif //WSSERVERDRAWER_TIME_LOG + }; + +#endif //SERVERDRAWERCONTROLLER_H +