author | Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> |
Tue, 14 Sep 2010 20:58:58 +0300 | |
branch | RCL_3 |
changeset 35 | 3321d3e205b6 |
parent 34 | 5456b4e8b3a8 |
permissions | -rw-r--r-- |
34 | 1 |
/* |
2 |
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). |
|
3 |
* All rights reserved. |
|
4 |
* This component and the accompanying materials are made available |
|
5 |
* under the terms of "Eclipse Public License v1.0" |
|
6 |
* which accompanies this distribution, and is available |
|
7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 |
* |
|
9 |
* Initial Contributors: |
|
10 |
* Nokia Corporation - initial contribution. |
|
11 |
* |
|
12 |
* Contributors: |
|
13 |
* |
|
14 |
* Description: Task monitor engine |
|
15 |
* |
|
16 |
*/ |
|
17 |
||
18 |
||
19 |
#ifndef TSFSWENGINE_H |
|
20 |
#define TSFSWENGINE_H |
|
21 |
||
22 |
#include <e32base.h> |
|
23 |
#include <e32cmn.h> |
|
24 |
#include <s32strm.h> |
|
25 |
#include <fbs.h> |
|
26 |
#include <eikenv.h> |
|
27 |
#include <w32std.h> |
|
28 |
#include <e32hashtab.h> |
|
29 |
#include <apgcli.h> |
|
30 |
#include <e32property.h> |
|
31 |
#include "tspreviewobserver.h" |
|
32 |
#include "tsfswentry.h" |
|
33 |
#include "tsfswobservers.h" |
|
34 |
||
35 |
class MTsFswEngineObserver; |
|
36 |
class CTsFastSwapPreviewProvider; |
|
37 |
class CApaWindowGroupName; |
|
38 |
class CBitmapRotator; |
|
39 |
class CTsRotationTask; |
|
40 |
class CTSCpsNotifier; |
|
41 |
||
42 |
class CTsFswDataList; |
|
43 |
||
44 |
// descriptor big enough to store hex repr of 32-bit integer plus 0x prefix |
|
45 |
typedef TBuf<10> TAppUidHexString; |
|
46 |
||
47 |
/** |
|
48 |
* Engine for fast swap server. |
|
49 |
* Performs task monitoring, notifications about wg changes are |
|
50 |
* received from the appui. |
|
51 |
*/ |
|
52 |
NONSHARABLE_CLASS( CTsFswEngine ) : public CActive, |
|
53 |
public MTsFswTaskListObserver, |
|
54 |
public MTsFswResourceObserver, |
|
55 |
public MTsFsHiddenAppListObserver, |
|
56 |
public MTsFastSwapPreviewObserver |
|
57 |
{ |
|
58 |
public: |
|
59 |
/** |
|
60 |
* Creates a new instance. |
|
61 |
* @param aObserver ref to observer |
|
62 |
*/ |
|
63 |
IMPORT_C static CTsFswEngine* NewL( MTsFswEngineObserver& aObserver ); |
|
64 |
||
65 |
/** |
|
66 |
* @copydoc NewL |
|
67 |
*/ |
|
68 |
IMPORT_C static CTsFswEngine* NewLC( MTsFswEngineObserver& aObserver ); |
|
69 |
||
70 |
/** |
|
71 |
* Destructor. |
|
72 |
*/ |
|
73 |
~CTsFswEngine(); |
|
74 |
||
75 |
/** |
|
76 |
* Returns a reference to the current content. |
|
77 |
* Also performs sanity checks, e.g. associates application icons |
|
78 |
* when no screenshot has been received. |
|
79 |
* @return ref to content array |
|
80 |
*/ |
|
81 |
IMPORT_C const RTsFswArray& FswDataL(); |
|
82 |
||
83 |
/** |
|
84 |
* Tries to close the given app. |
|
85 |
* @param aWgId value given by WgId() for an entry in iData |
|
86 |
*/ |
|
87 |
IMPORT_C void CloseAppL( TInt aWgId ); |
|
88 |
||
89 |
/** |
|
90 |
* Brings the given app to foreground. |
|
91 |
* @param aWgId value given by WgId() for an entry in iData |
|
92 |
*/ |
|
93 |
IMPORT_C void SwitchToAppL( TInt aWgId ); |
|
94 |
||
95 |
/** |
|
96 |
* Returns the uid of the foreground app or KNullUid. |
|
97 |
* Will never return hidden apps, only those which can |
|
98 |
* also be seen in the array returned by FswDataL. |
|
99 |
* |
|
100 |
* In case of embedded apps the behaviour is controlled |
|
101 |
* by aType: it will return either the uid of the embedded |
|
102 |
* application or the container app. |
|
103 |
* |
|
104 |
* @param aType @see CTsFswClient::TTsFswFgAppType |
|
105 |
*/ |
|
106 |
IMPORT_C TUid ForegroundAppUidL( TInt aType ); |
|
107 |
||
108 |
public: |
|
109 |
/** |
|
110 |
* Callback for rotation completion. Takes ownership of a given |
|
111 |
* bitmap. |
|
112 |
*/ |
|
113 |
void RotationComplete( TInt aWgId, |
|
114 |
CFbsBitmap* aBitmap, |
|
115 |
CTsRotationTask* aCompletedTask, |
|
116 |
TInt aError ); |
|
117 |
||
118 |
/** |
|
119 |
* Called by CPS publisher when changes occours on widgets' CPS data. |
|
120 |
* Copies screenshot with use of delivered bitmap handle. |
|
121 |
* Moves last changed widget with entry into start position. |
|
122 |
*/ |
|
123 |
void HandleWidgetUpdateL( TInt aWidgetId, TInt aBitmapHandle ); |
|
124 |
||
125 |
private: |
|
126 |
// from CActive |
|
127 |
void RunL(); |
|
128 |
TInt RunError( TInt aError ); |
|
129 |
void DoCancel(); |
|
130 |
||
131 |
// from MTsFswTaskListObserver |
|
132 |
void UpdateTaskList(); |
|
133 |
||
134 |
// from MTsFswResourceObserver |
|
135 |
void HandleResourceChange( TInt aType ); |
|
136 |
||
137 |
// from MTsFsHiddenAppListObserver |
|
138 |
void HiddenAppListUpdated(); |
|
139 |
||
140 |
// from MTsFastSwapPreviewObserver |
|
141 |
void HandleFswPpApplicationChange( TInt aWgId, TInt aFbsHandle ); |
|
142 |
void HandleFswPpApplicationUnregistered( TInt aWgId ); |
|
35
3321d3e205b6
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
34
diff
changeset
|
143 |
void HandleFswPpApplicationBitmapRotation( TInt aWgId, |
3321d3e205b6
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
34
diff
changeset
|
144 |
TInt aFbsHandle, TBool aClockwise ); |
34 | 145 |
|
146 |
void RotateL( CFbsBitmap& aBitmap, TInt aWgId, TBool aClockwise ); |
|
147 |
||
148 |
private: |
|
149 |
/** |
|
150 |
* Constructor. |
|
151 |
*/ |
|
152 |
CTsFswEngine( MTsFswEngineObserver& aObserver ); |
|
153 |
||
154 |
/** |
|
155 |
* Performs 2nd phase construction. |
|
156 |
*/ |
|
157 |
void ConstructL(); |
|
158 |
||
159 |
/** |
|
160 |
* Gets the window group list and reconstructs the fsw content. |
|
161 |
* @return TBool ETrue if the list has been modified |
|
162 |
*/ |
|
163 |
TBool CollectTasksL(); |
|
164 |
||
165 |
||
166 |
/** |
|
167 |
* Makes a copy of the bitmap with the given handle. |
|
168 |
* @param aFbsHandle bitmap handle |
|
169 |
* @param aKeepAspectRatio if true then aspect ratio is kept |
|
170 |
* @return CFbsBitmap* the copy, ownership transferred to caller |
|
171 |
*/ |
|
172 |
CFbsBitmap* CopyBitmapL( TInt aFbsHandle, TBool aKeepAspectRatio ); |
|
173 |
||
174 |
/** |
|
175 |
* Callback for the iUpdateStarter timer. |
|
176 |
* Calls CollectTasksL and notifies the observer if the task list |
|
177 |
* has really been modified. |
|
178 |
*/ |
|
179 |
static TInt UpdateStarterCallback( TAny* aParam ); |
|
180 |
||
181 |
/** |
|
182 |
* Brings the given web widget to foreground. |
|
183 |
* @param aWidgetIndex index in the list of running widgets |
|
184 |
*/ |
|
185 |
void SwitchToWidgetL( TInt aWidgetIndex ); |
|
186 |
||
187 |
/** |
|
188 |
* Configues the preview provider with current screen size. |
|
189 |
*/ |
|
190 |
void SetPreviewParams(); |
|
191 |
||
192 |
/** |
|
193 |
* Registers and unregisters window groups to iPreviewProvider |
|
194 |
* if the window group list has been changed. |
|
195 |
*/ |
|
196 |
void UpdatePreviewContent(); |
|
197 |
||
198 |
/** |
|
199 |
* Gets and publishes the foreground app uid to CFW. |
|
200 |
*/ |
|
201 |
void PublishFgAppUidL(); |
|
202 |
||
203 |
/** |
|
204 |
* Close running widget |
|
205 |
* @param aOffset - widget info offset |
|
206 |
*/ |
|
207 |
void CloseWidgetL( TInt aOffset ); |
|
208 |
||
209 |
/** |
|
210 |
* Removes screenshot bitmap from contained iDataList |
|
211 |
*/ |
|
212 |
void RemoveScreenshot( TInt aWgId ); |
|
213 |
||
214 |
/** |
|
215 |
* Add or overwrite screenshot datamap into iDataList |
|
216 |
* @return ETrue if content was changed |
|
217 |
*/ |
|
218 |
TBool StoreScreenshot( TInt aWgId, CFbsBitmap* aBmp ); |
|
219 |
||
220 |
private: |
|
221 |
// data |
|
222 |
MTsFswEngineObserver& iObserver; |
|
223 |
CEikonEnv* iEnv; // not own |
|
224 |
||
225 |
// window server session |
|
226 |
RWsSession iWsSession; |
|
227 |
||
228 |
// apparc session |
|
229 |
RApaLsSession iAppArcSession; |
|
230 |
||
231 |
// preview provider instance, own |
|
232 |
CTsFastSwapPreviewProvider* iPreviewProvider; |
|
233 |
||
234 |
// timer to defer content refresh |
|
235 |
CPeriodic* iUpdateStarter; |
|
236 |
||
237 |
// true if web widgets are supported by the system |
|
238 |
TBool iWidgetsSupported; |
|
239 |
||
240 |
// PS property to listen for swi status changes |
|
241 |
RProperty iSwiProp; |
|
242 |
||
243 |
// window group ids returned by last WindowGroupList call |
|
244 |
RArray<TInt> iWgIds; |
|
245 |
||
246 |
TUid iFgAppUid; |
|
247 |
||
248 |
// For rotating bitmaps |
|
249 |
RPointerArray<CTsRotationTask> iRotaTasks; |
|
250 |
||
251 |
CTsFswDataList* iDataList;//own |
|
252 |
||
253 |
//Used to observ wigets' actions on CPS service |
|
254 |
CTSCpsNotifier* iCpsWidgetPublisher;//owned |
|
255 |
}; |
|
256 |
||
257 |
/** |
|
258 |
* Listener for rotation complete event |
|
259 |
*/ |
|
260 |
NONSHARABLE_CLASS( CTsRotationTask ) : public CActive |
|
261 |
{ |
|
262 |
public: |
|
263 |
CTsRotationTask( CTsFswEngine& aEngine ); |
|
264 |
~CTsRotationTask(); |
|
265 |
void StartLD( TInt aWgId, CFbsBitmap* aBitmapHandle, TBool aClockwise ); |
|
266 |
private: |
|
267 |
void RunL(); |
|
268 |
void DoCancel(); |
|
269 |
private: |
|
270 |
// Data |
|
271 |
CTsFswEngine& iEngine; |
|
272 |
TInt iWgId; |
|
273 |
CFbsBitmap* iBitmap; // owned for the duration of transformation |
|
274 |
CBitmapRotator* iRotator; // owned |
|
275 |
}; |
|
276 |
||
277 |
#endif |