diff -r 5f0182e07bfb -r 5456b4e8b3a8 taskswitcher/contextengine/tsfswserver/engine/inc/tsfswengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/contextengine/tsfswserver/engine/inc/tsfswengine.h Wed Sep 01 12:32:46 2010 +0100 @@ -0,0 +1,276 @@ +/* +* Copyright (c) 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: Task monitor engine + * +*/ + + +#ifndef TSFSWENGINE_H +#define TSFSWENGINE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "tspreviewobserver.h" +#include "tsfswentry.h" +#include "tsfswobservers.h" + +class MTsFswEngineObserver; +class CTsFastSwapPreviewProvider; +class CApaWindowGroupName; +class CBitmapRotator; +class CTsRotationTask; +class CTSCpsNotifier; + +class CTsFswDataList; + +// descriptor big enough to store hex repr of 32-bit integer plus 0x prefix +typedef TBuf<10> TAppUidHexString; + +/** + * Engine for fast swap server. + * Performs task monitoring, notifications about wg changes are + * received from the appui. + */ +NONSHARABLE_CLASS( CTsFswEngine ) : public CActive, + public MTsFswTaskListObserver, + public MTsFswResourceObserver, + public MTsFsHiddenAppListObserver, + public MTsFastSwapPreviewObserver + { +public: + /** + * Creates a new instance. + * @param aObserver ref to observer + */ + IMPORT_C static CTsFswEngine* NewL( MTsFswEngineObserver& aObserver ); + + /** + * @copydoc NewL + */ + IMPORT_C static CTsFswEngine* NewLC( MTsFswEngineObserver& aObserver ); + + /** + * Destructor. + */ + ~CTsFswEngine(); + + /** + * Returns a reference to the current content. + * Also performs sanity checks, e.g. associates application icons + * when no screenshot has been received. + * @return ref to content array + */ + IMPORT_C const RTsFswArray& FswDataL(); + + /** + * Tries to close the given app. + * @param aWgId value given by WgId() for an entry in iData + */ + IMPORT_C void CloseAppL( TInt aWgId ); + + /** + * Brings the given app to foreground. + * @param aWgId value given by WgId() for an entry in iData + */ + IMPORT_C void SwitchToAppL( TInt aWgId ); + + /** + * Returns the uid of the foreground app or KNullUid. + * Will never return hidden apps, only those which can + * also be seen in the array returned by FswDataL. + * + * In case of embedded apps the behaviour is controlled + * by aType: it will return either the uid of the embedded + * application or the container app. + * + * @param aType @see CTsFswClient::TTsFswFgAppType + */ + IMPORT_C TUid ForegroundAppUidL( TInt aType ); + +public: + /** + * Callback for rotation completion. Takes ownership of a given + * bitmap. + */ + void RotationComplete( TInt aWgId, + CFbsBitmap* aBitmap, + CTsRotationTask* aCompletedTask, + TInt aError ); + + /** + * Called by CPS publisher when changes occours on widgets' CPS data. + * Copies screenshot with use of delivered bitmap handle. + * Moves last changed widget with entry into start position. + */ + void HandleWidgetUpdateL( TInt aWidgetId, TInt aBitmapHandle ); + +private: + // from CActive + void RunL(); + TInt RunError( TInt aError ); + void DoCancel(); + + // from MTsFswTaskListObserver + void UpdateTaskList(); + + // from MTsFswResourceObserver + void HandleResourceChange( TInt aType ); + + // from MTsFsHiddenAppListObserver + void HiddenAppListUpdated(); + + // from MTsFastSwapPreviewObserver + void HandleFswPpApplicationChange( TInt aWgId, TInt aFbsHandle ); + void HandleFswPpApplicationUnregistered( TInt aWgId ); + void HandleFswPpApplicationBitmapRotation( TInt aWgId, TBool aClockwise ); + + void RotateL( CFbsBitmap& aBitmap, TInt aWgId, TBool aClockwise ); + +private: + /** + * Constructor. + */ + CTsFswEngine( MTsFswEngineObserver& aObserver ); + + /** + * Performs 2nd phase construction. + */ + void ConstructL(); + + /** + * Gets the window group list and reconstructs the fsw content. + * @return TBool ETrue if the list has been modified + */ + TBool CollectTasksL(); + + + /** + * Makes a copy of the bitmap with the given handle. + * @param aFbsHandle bitmap handle + * @param aKeepAspectRatio if true then aspect ratio is kept + * @return CFbsBitmap* the copy, ownership transferred to caller + */ + CFbsBitmap* CopyBitmapL( TInt aFbsHandle, TBool aKeepAspectRatio ); + + /** + * Callback for the iUpdateStarter timer. + * Calls CollectTasksL and notifies the observer if the task list + * has really been modified. + */ + static TInt UpdateStarterCallback( TAny* aParam ); + + /** + * Brings the given web widget to foreground. + * @param aWidgetIndex index in the list of running widgets + */ + void SwitchToWidgetL( TInt aWidgetIndex ); + + /** + * Configues the preview provider with current screen size. + */ + void SetPreviewParams(); + + /** + * Registers and unregisters window groups to iPreviewProvider + * if the window group list has been changed. + */ + void UpdatePreviewContent(); + + /** + * Gets and publishes the foreground app uid to CFW. + */ + void PublishFgAppUidL(); + + /** + * Close running widget + * @param aOffset - widget info offset + */ + void CloseWidgetL( TInt aOffset ); + + /** + * Removes screenshot bitmap from contained iDataList + */ + void RemoveScreenshot( TInt aWgId ); + + /** + * Add or overwrite screenshot datamap into iDataList + * @return ETrue if content was changed + */ + TBool StoreScreenshot( TInt aWgId, CFbsBitmap* aBmp ); + +private: + // data + MTsFswEngineObserver& iObserver; + CEikonEnv* iEnv; // not own + + // window server session + RWsSession iWsSession; + + // apparc session + RApaLsSession iAppArcSession; + + // preview provider instance, own + CTsFastSwapPreviewProvider* iPreviewProvider; + + // timer to defer content refresh + CPeriodic* iUpdateStarter; + + // true if web widgets are supported by the system + TBool iWidgetsSupported; + + // PS property to listen for swi status changes + RProperty iSwiProp; + + // window group ids returned by last WindowGroupList call + RArray iWgIds; + + TUid iFgAppUid; + + // For rotating bitmaps + RPointerArray iRotaTasks; + + CTsFswDataList* iDataList;//own + + //Used to observ wigets' actions on CPS service + CTSCpsNotifier* iCpsWidgetPublisher;//owned + }; + +/** + * Listener for rotation complete event + */ +NONSHARABLE_CLASS( CTsRotationTask ) : public CActive + { +public: + CTsRotationTask( CTsFswEngine& aEngine ); + ~CTsRotationTask(); + void StartLD( TInt aWgId, CFbsBitmap* aBitmapHandle, TBool aClockwise ); +private: + void RunL(); + void DoCancel(); +private: + // Data + CTsFswEngine& iEngine; + TInt iWgId; + CFbsBitmap* iBitmap; // owned for the duration of transformation + CBitmapRotator* iRotator; // owned + }; + +#endif