diff -r 000000000000 -r 15bf7259bb7c uiaccelerator_plat/alf_client_server_api/inc/alf/alfappserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappserver.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,420 @@ +/* +* 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: Application server +* +*/ + + + +#ifndef C_ALFAPPSERVER_H +#define C_ALFAPPSERVER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class CApaAppServiceBase; +class CAlfAppSrvSessionBase; +class CAlfEcomUtil; +class MWindowVisibilityObserver; +class CAlfSrvSubSessionBase; +class CAlfSrvTransEffect; +class CAlfAppSrvSession; +class CAlfSrvTextureManager; +class MTransitionServer2; +class CAlfSrvScreenBufferManager; + +/** + * Application server class. + * + * The server class is responsible of managing the sessions/services. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS(CAlfAppServer) : public CAknAppServer + { + +public: + + // Window group position compared to the client wg (=parent) + enum TAlfWGPostion + { + EBehindOfParent, + EOnTopOfParent, + EAbsoluteBackground, + EAlfWindowSize + }; + + + /** + * Static constructor. + */ + IMPORT_C static CAlfAppServer* NewAppServerL(); + + /** + * Destructor. + */ + ~CAlfAppServer(); + + /** + * Client is about to exit, free all resources for the specific client + * + * @param aClientId Unique identifier of client, usually address of client's + * instance pointer + */ //Todo: as this is called from base class inside library, no need to export ? + IMPORT_C void HandleClientExit(TInt aClientId); + + /** + * Moves the server window group relative to the clinet (parent) wg. + * + * @param aWindowGroup Server window group + * @param aParentIdentifier Client side window group + * @param aPosition Server's wg position compared to the client's wg. + */ + IMPORT_C void AdjustWindowGroupPositionL( + RWindowGroup& aWindowGroup, + TInt aParentIdentifier, + TAlfWGPostion aPosition ); + + /** + * Get server's window server session. + * + * @return Window server session reference. + */ + IMPORT_C RWsSession& WsSession() const; + + /** + * Get metrics interface + * + * @return Metrics API. NULL if not set. Ownership not transferred. + */ + IMPORT_C MAlfMetricsInterface* MetricsInterface(); + IMPORT_C const MAlfMetricsInterface* MetricsInterface() const; + + /** + * Set metrics interface + * + * @param aMetricsInterface Metrics API. Ownership not transferred. + */ + IMPORT_C void SetMetricsInterface(MAlfMetricsInterface* aMetricsInterface); + + /** + * Sets AppUi pointer. + * + * @param aAppUi AppUi pointer. Ownership not transferred. + */ + void SetAppUi(CAlfAppUi* aAppUi); + + /** + * Get AppUi pointer + * + * @return AppUi pointer. NULL if not set. Ownership not transferred. + */ + IMPORT_C CAlfAppUi* AppUi(); + + /** + * Called when the focused window group is changed + * + * @param aSession Pointer to focused session + * @param aWgId Window group identifier of new session, needed only when embedded apps transition takes place + */ + void FocusedWindowGroupChangedL( CAlfAppSrvSessionBase* aSession, TInt aWgId = KErrNotFound ); + + /** + * Called when window visibility changes. + * + * @param aVisibilityFlags Visibility flags - see TWsVisibilityChangedEvent + * @param aDestination Associated window-owning control. + */ + void WindowVisiblityChangedL( TUint aVisibilityFlags, CCoeControl* aDestination ); + + /** + * Checks ECom plug-ins. + */ + void CheckForEcomPluginInstallUninstallL(); + + /** + * For setting observers which will receive notify when window visibility changes. + * + * @param aObserver observer implementing MWindowVisibilityObserver interface + * @param aClientId Identifier of a session so observer can be removed on queue when the session is terminated + */ + IMPORT_C void SetWindowChangeObserverL(MWindowVisibilityObserver* aObserver, TInt aClientId); + + /** + * Returns a new container for sub sessions. + * + * @return Container. Ownership not transferred. + */ + CObjectCon* NewContainerL(); + +// from base class CAknAppServer + + /** + * From CAknAppServer + * Creates session/service based on the given service type. + * This is called by the framework when a client opens session with the + * server. + * + * @param aServiceType Service type, which identifies the service. + * @return New service/session instance. Ownership transferred. + */ + CApaAppServiceBase* CreateServiceL( TUid aServiceType ) const; + + /** + * From CAknAppServer + * Called when all client have exited. + */ + void HandleAllClientsClosed(); + +public: // internals + + /** + * Used by callback for asynchronous ecom implementation removal + */ + void DoSynchEcomImplementations(); + + MAlfExtension* CreateExtensionL(TInt aImplementationUid, TInt aImplementationId, const RMessage2 & aMessage ); + + void DestroyedObject(TInt aFactoryUid); + + void CreateTransitionEffectsL(); + + CAlfSrvTransEffect* TransitionEffects(); + + TInt CreateTfxServerPlugin(); + + MTransitionServer2* TfxServer(); + + /** + * Sends an event to all clients. This method can be used for general purpose server to client + * notifications e.g. when server receives resource changed event or ws-events or + * something else as long as the clientside knows how to handle the event. + */ + void TriggerSystemEvent(TInt aEvent); + + void StartBackgroundTimerL(TInt aClientWg); + + void CancelBackgroundTimer(); + + /** + * Returns maximum length of common command batch buffer. + * @return maximum length of common command batch buffer. + */ + TInt CommonCommandBatchBufferMaxLength() const; + + /** + * Gets common command batch buffer (unless it is already in use). + * Client must call ReleaseCommonCommandBatchBuffer to release buffer for + * global use. + * @param aBuffer pointer descriptor which will point to common buffer. + * @return ETrue if common command batch buffer was given to client, EFalse otherwise. + */ + TBool AcquireCommonCommandBatchBuffer( TPtr8& aBuffer ); + + /** + * Releases common command batch buffer for global use. + */ + void ReleaseCommonCommandBatchBuffer(); + + /** + * Returns reference to texture manager. + * @return reference to texture manager. + */ + CAlfSrvTextureManager& TextureManager(); + + /** + * Returns reference to screen buffer manager. + * @return reference to screen buffer manager. + */ + CAlfSrvScreenBufferManager& ScreenBufferManager(); + + /** + * Goes through all the sessions and checks if one of them has the keyboard focus + */ + TBool AlfClientHasFocus(); + + /** + * This is typically called by the session when it receives EAlfNotifyAppVisibility event that + * it's windowgroup is getting hidden. + * + * The session can query if there is some other alf application's window group above it + * and set that other session as a new activesession + */ + CAlfAppSrvSessionBase* UpMostClientAboveWg( TInt aWgId ); + +public: + + CAlfAppSrvSessionBase* iOldSession; + + /** + * Second phase constructor. Called by framework. + * @param aFixedServerName server name. + */ + void ConstructL( const TDesC& aFixedServerName ); + +private: + + // private default constructor + CAlfAppServer(); + + /** + * Checks if implementation exists. + */ + TBool ImplementationExists(TUid aServiceType) const; + + /** + * Loads extension. + */ + CAlfAppSrvSessionBase* LoadServiceExtensionL(TUid aServiceType); + + /** + * Creates new session implementation. + */ + CAlfAppSrvSessionBase* NewImplementationL(TUid aServiceType); + + /** + * Initiate callback for asynchronous ecom implementation removal + */ + void SyncEcomImplementations(TInt aClientId); + + /** + * Rnd: logs the window groups + */ + void LogWindowGroupsL() const; + + /** + * Ecom factory has been removed, command sessions to close assosiated objects + */ + void NotifySessionsAboutDestroyedImplementation(TInt aFactoryUid); + +private: + + // just to allow accessing Cone's session without CCoeStatic + RWsSession* iWs; + + // backdrop window group identifier, cahcing this value allows us find status pane window group much faster + // should be initialized in leaving constructor once that is implemented + TInt iBackDropWgIdentifier; + + // Metrics API. Not owned. + MAlfMetricsInterface* iMetricsInterface; + + // AppUi pointer. Not owned. + CAlfAppUi* iAppUi; + + // Window group id of the client + // This is updated when the client becomes focused. + TInt iLastActiveClientWg; + + // ECom observer. + CAlfEcomUtil* iEcomWatcher; + + struct TWindowChangeObserver + { + TWindowChangeObserver(MWindowVisibilityObserver* aObserver, TInt aClientId):iId(aClientId), iPtr(aObserver){} + TInt iId; + MWindowVisibilityObserver* iPtr; + }; + + // list of sessions which are interested about window visibility changes + RArray iWindowChangeObservers; + + struct TServiceExtension + { + TServiceExtension():iImpl(0){} + operator==(const TInt aId) + { + return TInt(iImpl)==aId; + } + TUid iDestructorUid; + TUid iServiceUid; + CAlfAppSrvSessionBase* iImpl; + }; + + // list of ecom based sessions + RArray iCustomSessions; + + // list of ecom based sessions that have been already destructed, + // but the ECom Fw has not been notified yet + RArray iRemovedArray; + + // Async callback for ecom callbacks + CAsyncCallBack* iAsynchOneShot; + + // For sub session objects. Own. + CObjectConIx* iObjectConIx; + + + struct TAlfElementFactory + { + TAlfElementFactory():iImpl(0), iAccessCount(0){} + operator==(const TInt aId) + { + return iUid.iUid==aId; + } + + TUid iDestructorUid; + TUid iUid; + MAlfExtensionFactory* iImpl; + TInt iAccessCount; + }; + + RArray iFactories; + + TInt iTransitionEffect; + + // Transition effects framework + CAlfSrvTransEffect* iTransitionEffects; + + // Tfx Server API (ECom plugin) + MTransitionServer2* iTfxServer; + + // Tfx Server API destructor uid + TUid iTfxServerEComDestructorUID; + + CPeriodic* iBackgroundTimer; + + /** + * Command batch buffer. This buffer is shared between all sessions. + * Owned. + */ + HBufC8* iCommonCommandBatchBuffer; + + /** + * Boolean variable indicating if common command batch buffer is in use. + */ + TBool iCommonCommandBatchBufferInUse; + + /** + * Server side texture manager. + * Owned. + */ + CAlfSrvTextureManager* iTextureManager; + + /** + * Server side screen buffer manager. + * Owned. + */ + CAlfSrvScreenBufferManager* iScreenBufferManager; + + }; + +#endif // C_ALFAPPSERVER_H