|
1 /* |
|
2 * Copyright (c) 2002 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 the License "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: Push Ui Data Mtm class definition |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 // INCLUDE FILES |
|
21 |
|
22 #include "PushMtmUiData.h" |
|
23 #include "PushMtmCommands.hrh" |
|
24 #include "PushMtmUiDef.h" |
|
25 #include "PushMtmUiPanic.h" |
|
26 #include "PushMtmUtil.h" |
|
27 #include <PushMtmUi.rsg> |
|
28 #include <PushEntry.h> |
|
29 #include <msvuids.h> |
|
30 #include <MTMExtendedCapabilities.hrh> |
|
31 #include <PushMtm.mbg> |
|
32 #include <data_caging_path_literals.hrh> |
|
33 #include <f32file.h> |
|
34 #include <AknsUtils.h> |
|
35 |
|
36 // CONSTANTS |
|
37 |
|
38 // Number of zoom states. |
|
39 LOCAL_C const TInt KPushIconArrayGranularity = 2; |
|
40 |
|
41 // ================= MEMBER FUNCTIONS ======================= |
|
42 |
|
43 // --------------------------------------------------------- |
|
44 // CPushMtmUiData::NewL |
|
45 // --------------------------------------------------------- |
|
46 // |
|
47 EXPORT_C CPushMtmUiData* CPushMtmUiData::NewL |
|
48 ( CRegisteredMtmDll& aRegisteredDll ) |
|
49 { |
|
50 CPushMtmUiData* uiData = new (ELeave) CPushMtmUiData( aRegisteredDll ); |
|
51 CleanupStack::PushL( uiData ); |
|
52 uiData->ConstructL(); |
|
53 CleanupStack::Pop(); // uiData |
|
54 return uiData; |
|
55 } |
|
56 |
|
57 // --------------------------------------------------------- |
|
58 // CPushMtmUiData::~CPushMtmUiData |
|
59 // --------------------------------------------------------- |
|
60 // |
|
61 CPushMtmUiData::~CPushMtmUiData() |
|
62 { |
|
63 } |
|
64 |
|
65 // --------------------------------------------------------- |
|
66 // CPushMtmUiData::CPushMtmUiData |
|
67 // --------------------------------------------------------- |
|
68 // |
|
69 CPushMtmUiData::CPushMtmUiData( CRegisteredMtmDll& aRegisteredDll ) |
|
70 : CBaseMtmUiData( aRegisteredDll ) |
|
71 { |
|
72 } |
|
73 |
|
74 // --------------------------------------------------------- |
|
75 // CPushMtmUiData::ContextIcon |
|
76 // --------------------------------------------------------- |
|
77 // |
|
78 const CBaseMtmUiData::CBitmapArray& CPushMtmUiData::ContextIcon |
|
79 ( const TMsvEntry& aContext, TInt /*aStateFlags*/ ) const |
|
80 { |
|
81 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
82 __ASSERT_DEBUG( aContext.iType.iUid != KUidMsvFolderEntryValue, |
|
83 UiPanic( EPushMtmUiPanFoldersNotSupported ) ); |
|
84 |
|
85 return *iIconArrays->At( aContext.Unread() ? 0 : 1 ); |
|
86 } |
|
87 |
|
88 // --------------------------------------------------------- |
|
89 // CPushMtmUiData::CanCreateEntryL |
|
90 // --------------------------------------------------------- |
|
91 // |
|
92 #ifdef _DEBUG |
|
93 TBool CPushMtmUiData::CanCreateEntryL( const TMsvEntry& /*aParent*/, |
|
94 TMsvEntry& aNewEntry, TInt& aReasonResourceId ) const |
|
95 #else // _DEBUG |
|
96 TBool CPushMtmUiData::CanCreateEntryL( const TMsvEntry& /*aParent*/, |
|
97 TMsvEntry& /*aNewEntry*/, TInt& aReasonResourceId ) const |
|
98 #endif // _DEBUG |
|
99 { |
|
100 __ASSERT_DEBUG( aNewEntry.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
101 aReasonResourceId = KErrNotSupported; |
|
102 return EFalse; |
|
103 } |
|
104 |
|
105 // --------------------------------------------------------- |
|
106 // CPushMtmUiData::CanDeleteFromEntryL |
|
107 // --------------------------------------------------------- |
|
108 // |
|
109 #ifdef _DEBUG |
|
110 TBool CPushMtmUiData::CanDeleteFromEntryL |
|
111 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
112 #else // _DEBUG |
|
113 TBool CPushMtmUiData::CanDeleteFromEntryL |
|
114 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const |
|
115 #endif // _DEBUG |
|
116 { |
|
117 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
118 aReasonResourceId = KErrNotSupported; |
|
119 return ETrue; |
|
120 } |
|
121 |
|
122 // --------------------------------------------------------- |
|
123 // CPushMtmUiData::CanDeleteServiceL |
|
124 // --------------------------------------------------------- |
|
125 // |
|
126 #ifdef _DEBUG |
|
127 TBool CPushMtmUiData::CanDeleteServiceL |
|
128 ( const TMsvEntry& aService, TInt& aReasonResourceId ) const |
|
129 #else // _DEBUG |
|
130 TBool CPushMtmUiData::CanDeleteServiceL |
|
131 ( const TMsvEntry& /*aService*/, TInt& aReasonResourceId ) const |
|
132 #endif // _DEBUG |
|
133 { |
|
134 __ASSERT_DEBUG( aService.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
135 aReasonResourceId = KErrNotSupported; |
|
136 return EFalse; |
|
137 } |
|
138 |
|
139 // --------------------------------------------------------- |
|
140 // CPushMtmUiData::CanReplyToEntryL |
|
141 // --------------------------------------------------------- |
|
142 // |
|
143 #ifdef _DEBUG |
|
144 TBool CPushMtmUiData::CanReplyToEntryL |
|
145 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
146 #else // _DEBUG |
|
147 TBool CPushMtmUiData::CanReplyToEntryL |
|
148 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const |
|
149 #endif // _DEBUG |
|
150 { |
|
151 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
152 aReasonResourceId = KErrNotSupported; |
|
153 return EFalse; |
|
154 } |
|
155 |
|
156 // --------------------------------------------------------- |
|
157 // CPushMtmUiData::CanForwardEntryL |
|
158 // --------------------------------------------------------- |
|
159 // |
|
160 #ifdef _DEBUG |
|
161 TBool CPushMtmUiData::CanForwardEntryL |
|
162 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
163 #else // _DEBUG |
|
164 TBool CPushMtmUiData::CanForwardEntryL |
|
165 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const |
|
166 #endif // _DEBUG |
|
167 { |
|
168 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
169 aReasonResourceId = KErrNotSupported; |
|
170 return EFalse; |
|
171 } |
|
172 |
|
173 // --------------------------------------------------------- |
|
174 // CPushMtmUiData::CanEditEntryL |
|
175 // --------------------------------------------------------- |
|
176 // |
|
177 TBool CPushMtmUiData::CanEditEntryL |
|
178 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
179 { |
|
180 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
181 |
|
182 aReasonResourceId = KErrNotSupported; |
|
183 |
|
184 if ( aContext.iType == KUidMsvServiceEntry ) |
|
185 { |
|
186 // Only the service entry can be changed. |
|
187 return ETrue; |
|
188 } |
|
189 return EFalse; |
|
190 } |
|
191 |
|
192 // --------------------------------------------------------- |
|
193 // CPushMtmUiData::CanViewEntryL |
|
194 // --------------------------------------------------------- |
|
195 // |
|
196 TBool CPushMtmUiData::CanViewEntryL |
|
197 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
198 { |
|
199 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
200 |
|
201 aReasonResourceId = KErrNotSupported; |
|
202 |
|
203 if ( aContext.iType != KUidMsvMessageEntry ) |
|
204 { |
|
205 // Only the messages can be viewed(this function |
|
206 // should not be available on a service entry) |
|
207 return EFalse; |
|
208 } |
|
209 return ETrue; |
|
210 } |
|
211 |
|
212 // --------------------------------------------------------- |
|
213 // CPushMtmUiData::CanOpenEntryL |
|
214 // --------------------------------------------------------- |
|
215 // |
|
216 TBool CPushMtmUiData::CanOpenEntryL |
|
217 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
218 { |
|
219 return CanViewEntryL( aContext, aReasonResourceId ); |
|
220 } |
|
221 |
|
222 // --------------------------------------------------------- |
|
223 // CPushMtmUiData::CanCloseEntryL |
|
224 // --------------------------------------------------------- |
|
225 // |
|
226 TBool CPushMtmUiData::CanCloseEntryL |
|
227 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
228 { |
|
229 return CanOpenEntryL( aContext, aReasonResourceId ); |
|
230 } |
|
231 |
|
232 // --------------------------------------------------------- |
|
233 // CPushMtmUiData::CanCopyMoveToEntryL |
|
234 // --------------------------------------------------------- |
|
235 // |
|
236 TBool CPushMtmUiData::CanCopyMoveToEntryL |
|
237 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
238 { |
|
239 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
240 |
|
241 aReasonResourceId = KErrNotSupported; |
|
242 |
|
243 if ( aContext.iType != KUidMsvMessageEntry ) |
|
244 { |
|
245 // Only the messages can be moved(this function |
|
246 // should not be available on a service entry) |
|
247 return EFalse; |
|
248 } |
|
249 return ETrue; |
|
250 } |
|
251 |
|
252 // --------------------------------------------------------- |
|
253 // CPushMtmUiData::CanCopyMoveFromEntryL |
|
254 // --------------------------------------------------------- |
|
255 // |
|
256 #ifdef _DEBUG |
|
257 TBool CPushMtmUiData::CanCopyMoveFromEntryL |
|
258 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
259 #else // _DEBUG |
|
260 TBool CPushMtmUiData::CanCopyMoveFromEntryL |
|
261 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const |
|
262 #endif // _DEBUG |
|
263 { |
|
264 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
265 |
|
266 aReasonResourceId = KErrNotSupported; |
|
267 |
|
268 return EFalse; |
|
269 } |
|
270 |
|
271 // --------------------------------------------------------- |
|
272 // CPushMtmUiData::CanCancelL |
|
273 // --------------------------------------------------------- |
|
274 // |
|
275 #ifdef _DEBUG |
|
276 TBool CPushMtmUiData::CanCancelL |
|
277 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const |
|
278 #else // _DEBUG |
|
279 TBool CPushMtmUiData::CanCancelL |
|
280 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const |
|
281 #endif // _DEBUG |
|
282 { |
|
283 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
284 |
|
285 aReasonResourceId = KErrNotSupported; |
|
286 |
|
287 return EFalse; |
|
288 } |
|
289 |
|
290 // --------------------------------------------------------- |
|
291 // CPushMtmUiData::OperationSupportedL |
|
292 // --------------------------------------------------------- |
|
293 // |
|
294 TInt CPushMtmUiData::OperationSupportedL |
|
295 ( TInt aOperationId, const TMsvEntry& aContext ) const |
|
296 { |
|
297 __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) ); |
|
298 __ASSERT_DEBUG( aContext.iType.iUid != KUidMsvFolderEntryValue, |
|
299 UiPanic( EPushMtmUiPanFoldersNotSupported ) ); |
|
300 |
|
301 TInt ret( KErrCancel ); |
|
302 |
|
303 switch ( aOperationId ) |
|
304 { |
|
305 |
|
306 case KMtmUiFunctionMessageInfo: |
|
307 { |
|
308 // The message info operation is always supported. |
|
309 ret = ( aContext.iType.iUid == KUidMsvMessageEntryValue ) ? |
|
310 KErrNone : KErrCancel; |
|
311 break; |
|
312 } |
|
313 |
|
314 case EPushMtmCmdLoadService: |
|
315 { |
|
316 // This function is available only if the message has URL in it. |
|
317 if ( aContext.iType.iUid != KUidMsvMessageEntryValue ) |
|
318 { |
|
319 // LoadService is not supported. |
|
320 ret = KErrCancel; |
|
321 } |
|
322 else |
|
323 { |
|
324 if ( aContext.iBioType == KUidWapPushMsgSI.iUid && |
|
325 CPushMtmUtil::Attrs( aContext ) & EPushMtmAttrHasHref ) |
|
326 { |
|
327 // SI with not empty URL: LoadService is supported. |
|
328 ret = KErrNone; |
|
329 } |
|
330 else if ( aContext.iBioType == KUidWapPushMsgSL.iUid && |
|
331 CPushMtmUtil::Attrs( aContext ) & EPushMtmAttrHasHref ) |
|
332 { |
|
333 // SL with not empty URL: LoadService is supported. |
|
334 ret = KErrNone; |
|
335 } |
|
336 else |
|
337 { |
|
338 // LoadService is not supported. |
|
339 ret = KErrCancel; |
|
340 } |
|
341 } |
|
342 break; |
|
343 } |
|
344 |
|
345 default: |
|
346 { |
|
347 // No other operations are supported. |
|
348 ret = KErrCancel; |
|
349 break; |
|
350 } |
|
351 } |
|
352 |
|
353 return ret; |
|
354 } |
|
355 |
|
356 // --------------------------------------------------------- |
|
357 // CPushMtmUiData::QueryCapability |
|
358 // --------------------------------------------------------- |
|
359 // |
|
360 TInt CPushMtmUiData::QueryCapability( TUid aCapability, TInt& aResponse ) const |
|
361 { |
|
362 TInt ret( KErrNotSupported ); |
|
363 |
|
364 if ( aCapability.iUid == KUidMsvMtmQueryMessageInfo ) |
|
365 { |
|
366 aResponse = ETrue; |
|
367 ret = KErrNone; |
|
368 } |
|
369 |
|
370 return ret; |
|
371 } |
|
372 |
|
373 // --------------------------------------------------------- |
|
374 // CPushMtmUiData::StatusTextL |
|
375 // --------------------------------------------------------- |
|
376 // |
|
377 HBufC* CPushMtmUiData::StatusTextL( const TMsvEntry& /*aContext*/ ) const |
|
378 { |
|
379 return NULL; |
|
380 } |
|
381 |
|
382 // --------------------------------------------------------- |
|
383 // CPushMtmUiData::PopulateArraysL |
|
384 // --------------------------------------------------------- |
|
385 // |
|
386 void CPushMtmUiData::PopulateArraysL() |
|
387 { |
|
388 ReadFunctionsFromResourceFileL( R_PUSH_MTM_UI_DATA_FUNCTION_ARRAY ); |
|
389 CreateSkinnedBitmapsL(); |
|
390 } |
|
391 |
|
392 // --------------------------------------------------------- |
|
393 // CPushMtmUiData::GetResourceFileName |
|
394 // --------------------------------------------------------- |
|
395 // |
|
396 void CPushMtmUiData::GetResourceFileName( TFileName& aFileName ) const |
|
397 { |
|
398 // Extract the file name and extension from the constant |
|
399 TParsePtrC fileParser( KPushMtmUiDataResourceFileAndDrive ); |
|
400 aFileName = fileParser.NameAndExt(); |
|
401 } |
|
402 |
|
403 // --------------------------------------------------------- |
|
404 // CPushMtmUiData::CreateSkinnedBitmapsL |
|
405 // --------------------------------------------------------- |
|
406 // |
|
407 void CPushMtmUiData::CreateSkinnedBitmapsL() |
|
408 { |
|
409 TParse fileParser; |
|
410 fileParser.Set( KPushMtmUiDataBitmapFileAndDrive, &KDC_APP_BITMAP_DIR, NULL ); |
|
411 |
|
412 MAknsSkinInstance* skins = AknsUtils::SkinInstance(); |
|
413 TAknsItemID id; |
|
414 CFbsBitmap* bitmap; |
|
415 CFbsBitmap* bitmapMask; |
|
416 TBool found = ETrue; |
|
417 |
|
418 for( TInt i = EMbmPushmtmQgn_prop_mce_push_unread; |
|
419 i < EMbmPushmtmQgn_prop_mce_push_read_mask + 1; |
|
420 i++ ) |
|
421 { |
|
422 found = ETrue; |
|
423 switch( i ) |
|
424 { |
|
425 // Add to iIconArrays in this order |
|
426 case EMbmPushmtmQgn_prop_mce_push_unread: |
|
427 id.Set( KAknsIIDQgnPropMcePushUnread ); |
|
428 break; |
|
429 case EMbmPushmtmQgn_prop_mce_push_read: |
|
430 id.Set( KAknsIIDQgnPropMcePushRead ); |
|
431 break; |
|
432 default: |
|
433 found = EFalse; |
|
434 break; |
|
435 } |
|
436 if( found ) |
|
437 { |
|
438 CArrayPtrFlat<CFbsBitmap>* array = |
|
439 new (ELeave) CArrayPtrFlat<CFbsBitmap>( KPushIconArrayGranularity ); |
|
440 CleanupStack::PushL( array ); |
|
441 |
|
442 array->SetReserveL( KPushIconArrayGranularity ); // AppendLs will not LEAVE |
|
443 AknsUtils::CreateIconL( skins, id, bitmap, bitmapMask, |
|
444 fileParser.FullName(), i, i + 1 ); |
|
445 // bitmap & bitmapMask is not on the Cleanup Stack, but it is not |
|
446 // necessary, because AppendLs will not LEAVE. |
|
447 array->AppendL( bitmap ); |
|
448 bitmap = 0; |
|
449 array->AppendL( bitmapMask ); |
|
450 bitmapMask = 0; |
|
451 iIconArrays->AppendL( array ); |
|
452 CleanupStack::Pop( array ); // array |
|
453 } |
|
454 } |
|
455 } |
|
456 |
|
457 // End of file. |