|
1 /* |
|
2 * Copyright (c) 2004 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: |
|
15 * Provides Notification MTM UI methods. |
|
16 * |
|
17 */ |
|
18 |
|
19 |
|
20 |
|
21 // INCLUDE FILES |
|
22 |
|
23 //Features |
|
24 #include <featmgr.h> |
|
25 #include <bldvariant.hrh> |
|
26 #include <MuiuMsvProgressReporterOperation.h> // CMsvProgressReporterOperation |
|
27 #include <mtudreg.h> // MTM UI data registry |
|
28 #include <mtudcbas.h> // MTM UI data base |
|
29 |
|
30 #include "NotMtmUi.h" |
|
31 |
|
32 #include <apgcli.h> |
|
33 #include <msvuids.h> |
|
34 #include <mtmuidef.hrh> |
|
35 |
|
36 #include <e32keys.h> |
|
37 #include <coemain.h> |
|
38 #include <eikenv.h> |
|
39 #include <eikdef.h> |
|
40 #include <eikmfne.h> |
|
41 #include <eikedwin.h> |
|
42 #include <eikcapc.h> |
|
43 #include <gulicon.h> |
|
44 #include <ErrorUI.h> //CErrorUI |
|
45 |
|
46 #include <aknnotewrappers.h> // CAknInformationNote |
|
47 #include <aknPopup.h> |
|
48 #include <aknlists.h> |
|
49 #include <aknconsts.h> |
|
50 #include <akncontext.h> |
|
51 #include <akntabgrp.h> |
|
52 #include <AknQueryDialog.h> |
|
53 #include <StringLoader.h> // link against CommonEngine.lib |
|
54 #include <Muiumsginfo.h> |
|
55 #include <MuiuMsvUiServiceUtilities.h> |
|
56 #include <muiumsvuiserviceutilitiesinternal.h> |
|
57 |
|
58 #include <akninputblock.h> // CAknInputBlock |
|
59 #include <MtmExtendedCapabilities.hrh> |
|
60 #include <messagingvariant.hrh> |
|
61 |
|
62 #include <centralrepository.h> // link against centralrepository.lib |
|
63 #include <messaginginternalcrkeys.h> // for Central Repository keys |
|
64 #include <CoreApplicationUIsSDKCRKeys.h> |
|
65 |
|
66 #include <ApUtils.h> //CApUtils, CCommsDatabase, EDatabaseTypeIAP |
|
67 |
|
68 #include <NotUi.rsg> |
|
69 #include <mmserrors.h> |
|
70 |
|
71 #include "NotMtmUiPanic.h" |
|
72 #include <mmsconst.h> |
|
73 #include <mmscmds.h> // EMmsDeleteSchedule |
|
74 |
|
75 #include <mmsmsventry.h> |
|
76 #include <mmsnotificationclient.h> |
|
77 #include <mmsgenutils.h> |
|
78 #include <mmssettings.h> // MMS Engine settings |
|
79 |
|
80 #include "MmsMtmConst.h" |
|
81 #include "MMBoxDialog.h" |
|
82 #include "NotMtmUiData.h" |
|
83 |
|
84 // CONSTANTS |
|
85 |
|
86 _LIT( KAddressSeparator,", " ); |
|
87 _LIT( KCharLeftAddressIterator, "<" ); |
|
88 _LIT( KCharRightAddressIterator, ">" ); |
|
89 _LIT( KMmsCharCommaAndSpace, ", " ); |
|
90 _LIT( KMmsCharSpace, " " ); |
|
91 |
|
92 const TInt KMessageSize = 20; |
|
93 const TInt KZero = 0; //constant for memory check |
|
94 const TInt KMmsAdditionalCharsStringLength = 7; |
|
95 const TUint KMmsLRMarker = 0x200E; |
|
96 const TUid KUidUniEditor = {0x102072D8}; |
|
97 |
|
98 #define IS_PHONE_OFF_LINEL() MsvUiServiceUtilitiesInternal::IsPhoneOfflineL() |
|
99 |
|
100 // MACROS |
|
101 #define iMmsClient ( static_cast<CMmsNotificationClientMtm&>( iBaseMtm ) ) |
|
102 |
|
103 // LOCAL CONSTANTS AND MACROS |
|
104 |
|
105 // MODULE DATA STRUCTURES |
|
106 |
|
107 // LOCAL FUNCTION PROTOTYPES |
|
108 |
|
109 // ==================== LOCAL FUNCTIONS ==================== |
|
110 |
|
111 // --------------------------------------------------------- |
|
112 // NewNotMtmUiL |
|
113 // Factory function |
|
114 // --------------------------------------------------------- |
|
115 // |
|
116 EXPORT_C CBaseMtmUi* NewNotMtmUiL( CBaseMtm& aMtm, CRegisteredMtmDll& aRegisteredDll ) |
|
117 { |
|
118 return CNotMtmUi::NewL( aMtm, aRegisteredDll ); |
|
119 } |
|
120 |
|
121 |
|
122 // ================= MEMBER FUNCTIONS ======================= |
|
123 |
|
124 // --------------------------------------------------------- |
|
125 // CNotMtmUi::CNotMtmUi |
|
126 // C++ default constructor can NOT contain any code, that |
|
127 // might leave. |
|
128 // --------------------------------------------------------- |
|
129 // |
|
130 CNotMtmUi::CNotMtmUi( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll ) |
|
131 : CBaseMtmUi( aBaseMtm, aRegisteredMtmDll ) |
|
132 { |
|
133 } |
|
134 |
|
135 // --------------------------------------------------------- |
|
136 // CNotMtmUi::ConstructL |
|
137 // Symbian OS default constructor can leave. |
|
138 // --------------------------------------------------------- |
|
139 // |
|
140 void CNotMtmUi::ConstructL() |
|
141 { |
|
142 LOGTEXT(_L8("NotMtmUi: Construct start")); |
|
143 CBaseMtmUi::ConstructL(); |
|
144 iSettingsHandler = CMmsSettingsHandler::NewL( iMmsClient ); |
|
145 |
|
146 TInt featureBitmask = 0; |
|
147 |
|
148 CRepository* repository = CRepository::NewL( KCRUidMuiuVariation ); |
|
149 repository->Get( KMuiuMmsFeatures, featureBitmask ); |
|
150 delete repository; |
|
151 repository = NULL; |
|
152 |
|
153 if ( featureBitmask & KMmsFeatureIdDeleteOptions ) |
|
154 { |
|
155 iNotUiFlags |= EDeleteOptionsSupported; |
|
156 } |
|
157 featureBitmask = 0; |
|
158 |
|
159 FeatureManager::InitializeLibL(); |
|
160 if ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) ) |
|
161 { |
|
162 iNotUiFlags |= EOffline; |
|
163 } |
|
164 FeatureManager::UnInitializeLib(); |
|
165 LOGTEXT(_L8("NotMtmUi: Construct end")); |
|
166 } |
|
167 |
|
168 // --------------------------------------------------------- |
|
169 // CNotMtmUi::NewL |
|
170 // Two-phased constructor. |
|
171 // --------------------------------------------------------- |
|
172 // |
|
173 CNotMtmUi* CNotMtmUi::NewL( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll ) |
|
174 { |
|
175 LOGTEXT( _L8( "NotMtmUi::NewL" ) ); |
|
176 CNotMtmUi* self = new ( ELeave ) CNotMtmUi( aBaseMtm, aRegisteredMtmDll ); |
|
177 |
|
178 CleanupStack::PushL( self ); |
|
179 self->ConstructL(); |
|
180 CleanupStack::Pop(); |
|
181 |
|
182 return self; |
|
183 } |
|
184 |
|
185 |
|
186 // --------------------------------------------------------- |
|
187 // CNotMtmUi::~CNotMtmUi |
|
188 // Destructor |
|
189 // --------------------------------------------------------- |
|
190 // |
|
191 CNotMtmUi::~CNotMtmUi() |
|
192 { |
|
193 delete iSettingsHandler; |
|
194 delete iWaitDialog; |
|
195 } |
|
196 |
|
197 |
|
198 // --------------------------------------------------------- |
|
199 // CNotMtmUi::QueryCapability |
|
200 // Capability check for UI mtm specific functionality. These should |
|
201 // be minimal, as the default capability checking places are UI data MTM |
|
202 // (UI) and client MTM (engine). |
|
203 // --------------------------------------------------------- |
|
204 TInt CNotMtmUi::QueryCapability( TUid aCapability, TInt& aResponse ) |
|
205 { |
|
206 switch ( aCapability.iUid ) |
|
207 { |
|
208 case KUidMsvMtmUiQueryMessagingInitialisation: // flow through |
|
209 case KUidMsvMtmQueryFactorySettings: |
|
210 case KUidMsvMtmQuerySupportValidateService: |
|
211 |
|
212 aResponse = ETrue; |
|
213 return KErrNone; |
|
214 default: |
|
215 // Actually this routes to client MTM capability check. |
|
216 return CBaseMtmUi::QueryCapability( aCapability, aResponse ); |
|
217 } |
|
218 } |
|
219 |
|
220 // --------------------------------------------------------- |
|
221 // CNotMtmUi::CreateL |
|
222 // Not supported. |
|
223 // --------------------------------------------------------- |
|
224 // |
|
225 CMsvOperation* CNotMtmUi::CreateL( const TMsvEntry& /*aEntry*/, |
|
226 CMsvEntry& /*aParent*/, |
|
227 TRequestStatus& /*aStatus*/ ) |
|
228 { |
|
229 User::Leave( KErrNotSupported ); |
|
230 return NULL; |
|
231 } |
|
232 |
|
233 // --------------------------------------------------------- |
|
234 // CNotMtmUi::CheckSettingsL() const |
|
235 // Check MMS service settings |
|
236 // --------------------------------------------------------- |
|
237 // |
|
238 EXPORT_C TBool CNotMtmUi::CheckSettingsL( CMmsSettingsDialog::TMmsExitCode& aExitCode ) const |
|
239 { |
|
240 // First reload the settings |
|
241 iSettingsHandler->RefreshSettingsL( ); |
|
242 return iSettingsHandler->CheckSettingsL( aExitCode ); |
|
243 } |
|
244 |
|
245 // --------------------------------------------------------- |
|
246 // CNotMtmUi::DeleteServiceL |
|
247 // --------------------------------------------------------- |
|
248 // |
|
249 CMsvOperation* CNotMtmUi::DeleteServiceL( const TMsvEntry& /*aService*/, |
|
250 TRequestStatus& /*aStatus*/ ) |
|
251 { |
|
252 User::Leave( KErrNotSupported ); |
|
253 return NULL; |
|
254 } |
|
255 |
|
256 // --------------------------------------------------------- |
|
257 // CNotMtmUi::DeleteFromL |
|
258 // --------------------------------------------------------- |
|
259 // |
|
260 CMsvOperation* CNotMtmUi::DeleteFromL( const CMsvEntrySelection& /*aSelection*/, |
|
261 TRequestStatus& /*aStatus*/ ) |
|
262 { |
|
263 User::Leave( KErrNotSupported ); |
|
264 return NULL; |
|
265 } |
|
266 |
|
267 // --------------------------------------------------------- |
|
268 // CMmsMtmUi::CopyToL |
|
269 // Copy local outbox entry to remote server = called when sending the entry from MCE outbox |
|
270 // --------------------------------------------------------- |
|
271 // |
|
272 CMsvOperation* CNotMtmUi::CopyToL( const CMsvEntrySelection& aSelection, |
|
273 TRequestStatus& aStatus ) |
|
274 { |
|
275 return CopyMoveToL( aSelection, aStatus, ETrue ); |
|
276 } |
|
277 |
|
278 // --------------------------------------------------------- |
|
279 // CNotMtmUi::MoveToL |
|
280 // Move local outbox entry to remote server. |
|
281 // --------------------------------------------------------- |
|
282 // |
|
283 CMsvOperation* CNotMtmUi::MoveToL( const CMsvEntrySelection& aSelection, |
|
284 TRequestStatus& aStatus ) |
|
285 { |
|
286 return CopyMoveToL( aSelection, aStatus, EFalse ); |
|
287 } |
|
288 |
|
289 // --------------------------------------------------------- |
|
290 // CNotMtmUi::CopyMoveToL |
|
291 // Performs either CopyToL or MoveToL operation. |
|
292 // --------------------------------------------------------- |
|
293 // |
|
294 CMsvOperation* CNotMtmUi::CopyMoveToL( const CMsvEntrySelection& aSelection, |
|
295 TRequestStatus& aStatus, TBool aCopyOnly ) |
|
296 { |
|
297 __ASSERT_DEBUG( iBaseMtm.Entry().Entry().iMtm==Type(), Panic( EMmsWrongMtm ) ); |
|
298 __ASSERT_DEBUG( iBaseMtm.Entry().Entry().iType==KUidMsvServiceEntry, Panic( EMmsNotAService ) ); |
|
299 |
|
300 // --- Carry out the operation --- |
|
301 TMsvEntry mmsService ( BaseMtm().Entry().Entry() ); |
|
302 // Get CMsvEntry of parent of messages to be sent |
|
303 CMsvEntry* parentEntry = Session().GetEntryL( aSelection[0] ); |
|
304 |
|
305 CleanupStack::PushL( parentEntry ); |
|
306 parentEntry->SetEntryL( parentEntry->Entry().Parent() ); |
|
307 |
|
308 // Do the copy/move |
|
309 CMsvOperation* op = aCopyOnly ? |
|
310 parentEntry->CopyL( aSelection, mmsService.Id(), aStatus ) : |
|
311 parentEntry->MoveL( aSelection, mmsService.Id(), aStatus ); |
|
312 |
|
313 CleanupStack::PopAndDestroy(); //parentEntry |
|
314 return op; |
|
315 } |
|
316 |
|
317 // --------------------------------------------------------- |
|
318 // CNotMtmUi::CopyFromL |
|
319 // Could be used in fetching messages manually, but client MTM API has simple FetchL() |
|
320 // --------------------------------------------------------- |
|
321 // |
|
322 CMsvOperation* CNotMtmUi::CopyFromL(const CMsvEntrySelection& /*aSelection*/, |
|
323 TMsvId /*aTargetId*/, |
|
324 TRequestStatus& /*aStatus*/) |
|
325 { |
|
326 User::Leave( KErrNotSupported ); |
|
327 return NULL; |
|
328 } |
|
329 |
|
330 // --------------------------------------------------------- |
|
331 // CNotMtmUi::MoveFromL |
|
332 // Could be used in fetching messages manually, but client MTM API has simple FetchL() |
|
333 // --------------------------------------------------------- |
|
334 // |
|
335 CMsvOperation* CNotMtmUi::MoveFromL(const CMsvEntrySelection& /*aSelection*/, |
|
336 TMsvId /*aTargetId*/, |
|
337 TRequestStatus& /*aStatus*/) |
|
338 { |
|
339 User::Leave( KErrNotSupported ); |
|
340 return NULL; |
|
341 } |
|
342 |
|
343 // --------------------------------------------------------- |
|
344 // CNotMtmUi::OpenL |
|
345 // Handles request to open existing message server entry (message/service) |
|
346 // --------------------------------------------------------- |
|
347 // |
|
348 CMsvOperation* CNotMtmUi::OpenL( TRequestStatus& aStatus ) |
|
349 { |
|
350 LOGTEXT(_L8("NotMtmUi: OpenL start")); |
|
351 __ASSERT_DEBUG( iBaseMtm.Entry().Entry().iMtm==Type(), Panic( EMmsWrongMtm ) ); |
|
352 |
|
353 const TMsvEntry& entry = BaseMtm().Entry().Entry(); |
|
354 if ( entry.ReadOnly() ) |
|
355 { |
|
356 return ViewL( aStatus ); |
|
357 } |
|
358 else |
|
359 { |
|
360 return EditL( aStatus ); |
|
361 } |
|
362 } |
|
363 |
|
364 // --------------------------------------------------------- |
|
365 // CNotMtmUi::OpenL |
|
366 // Opens the first entry in a selection |
|
367 // --------------------------------------------------------- |
|
368 // |
|
369 CMsvOperation* CNotMtmUi::OpenL( TRequestStatus& aStatus, |
|
370 const CMsvEntrySelection& aSelection ) |
|
371 { |
|
372 LOGTEXT(_L8("NotMtmUi: OpenL start")); |
|
373 __ASSERT_DEBUG( iBaseMtm.Entry().Entry().iMtm==Type(), Panic( EMmsWrongMtm ) ); |
|
374 |
|
375 BaseMtm().SwitchCurrentEntryL( aSelection[0] ); |
|
376 return OpenL( aStatus ); |
|
377 } |
|
378 |
|
379 // --------------------------------------------------------- |
|
380 // CNotMtmUi::CloseL |
|
381 // --------------------------------------------------------- |
|
382 // |
|
383 CMsvOperation* CNotMtmUi::CloseL( TRequestStatus& /*aStatus*/ ) |
|
384 { |
|
385 User::Leave( KErrNotSupported ); |
|
386 return NULL; |
|
387 } |
|
388 |
|
389 // --------------------------------------------------------- |
|
390 // CNotMtmUi::CloseL |
|
391 // --------------------------------------------------------- |
|
392 // |
|
393 CMsvOperation* CNotMtmUi::CloseL( TRequestStatus& /*aStatus*/, |
|
394 const CMsvEntrySelection& /*aSelection*/ ) |
|
395 { |
|
396 User::Leave( KErrNotSupported ); |
|
397 return NULL; |
|
398 } |
|
399 |
|
400 // --------------------------------------------------------- |
|
401 // CNotMtmUi::EditL |
|
402 // Opens a message (editor) or service (settings dialog) for editing. |
|
403 // --------------------------------------------------------- |
|
404 // |
|
405 CMsvOperation* CNotMtmUi::EditL( TRequestStatus& aStatus ) |
|
406 { |
|
407 LOGTEXT(_L8("NotMtmUi::EditL start")); |
|
408 __ASSERT_DEBUG( iBaseMtm.Entry().Entry().iMtm==Type(), Panic( EMmsWrongMtm ) ); |
|
409 |
|
410 CMsvOperation* msvoperation = NULL; |
|
411 |
|
412 switch ( iBaseMtm.Entry().Entry().iType.iUid ) |
|
413 { |
|
414 case KUidMsvMessageEntryValue: |
|
415 { |
|
416 CMmsSettingsDialog::TMmsExitCode exitCode = |
|
417 CMmsSettingsDialog::EMmsExternalInterrupt; |
|
418 |
|
419 if( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL( |
|
420 Session(), |
|
421 KZero ) ) |
|
422 { |
|
423 User::Leave( KErrDiskFull ); |
|
424 } |
|
425 |
|
426 if ( !CheckSettingsL( exitCode ) ) |
|
427 { |
|
428 TInt32 ap = iSettingsHandler->MmsSettings()->AccessPoint( 0 ); |
|
429 //settings saved with valid access point |
|
430 if( !( exitCode==CMmsSettingsDialog::EMmsBack && ApExistsL( ap ) ) ) |
|
431 { |
|
432 return CompleteSettingsOperationL( aStatus, exitCode ); |
|
433 } |
|
434 } |
|
435 |
|
436 if ( iBaseMtm.Entry().Entry().Connected() ) |
|
437 { |
|
438 User::Leave( KErrLocked ); |
|
439 } |
|
440 LOGTEXT( _L8( "NotMtmUi::EditL launching editor" ) ); |
|
441 msvoperation = LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session() ); |
|
442 } |
|
443 break; |
|
444 |
|
445 case KUidMsvServiceEntryValue: |
|
446 LOGTEXT( _L8( "NotMtmUi::EditL - launching settings" ) ); |
|
447 msvoperation = OpenServiceSettingsDialogL( aStatus ); |
|
448 break; |
|
449 |
|
450 case KUidMsvAttachmentEntryValue: // flow through |
|
451 case KUidMsvFolderEntryValue: // flow through |
|
452 default: |
|
453 User::Leave( KErrNotSupported ); |
|
454 break; |
|
455 } |
|
456 |
|
457 return msvoperation; |
|
458 } |
|
459 |
|
460 // --------------------------------------------------------- |
|
461 // CNotMtmUi::EditL |
|
462 // --------------------------------------------------------- |
|
463 // |
|
464 CMsvOperation* CNotMtmUi::EditL( TRequestStatus& aStatus, |
|
465 const CMsvEntrySelection& aSelection ) |
|
466 { |
|
467 BaseMtm().SwitchCurrentEntryL( aSelection[0] ); |
|
468 return EditL( aStatus ); |
|
469 } |
|
470 |
|
471 // --------------------------------------------------------- |
|
472 // CNotMtmUi::ViewL |
|
473 // Opens the message for reading in Viewer. |
|
474 // --------------------------------------------------------- |
|
475 // |
|
476 CMsvOperation* CNotMtmUi::ViewL( TRequestStatus& aStatus ) |
|
477 { |
|
478 LOGTEXT( _L8( "NotMtmUi::ViewL" ) ); |
|
479 __ASSERT_DEBUG( iBaseMtm.Entry().Entry().iMtm == Type(), Panic( EMmsWrongMtm ) ); |
|
480 |
|
481 CMsvOperation* msvoperation = NULL; |
|
482 |
|
483 switch ( iBaseMtm.Entry().Entry().iType.iUid ) |
|
484 { |
|
485 case KUidMsvMessageEntryValue: |
|
486 // It's a multimedia message |
|
487 if ( iBaseMtm.Entry().Entry().Connected() ) |
|
488 { |
|
489 User::Leave( KErrLocked ); |
|
490 } |
|
491 // Open Viewer |
|
492 LOGTEXT( _L8( "NotMtmUi::ViewL - launching Viewer" ) ); |
|
493 msvoperation = LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session(), EReadOnly ); |
|
494 break; |
|
495 case KUidMsvServiceEntryValue: |
|
496 case KUidMsvAttachmentEntryValue: |
|
497 case KUidMsvFolderEntryValue: |
|
498 default: |
|
499 User::Leave( KErrNotSupported ); |
|
500 break; |
|
501 } |
|
502 return msvoperation; |
|
503 } |
|
504 |
|
505 // --------------------------------------------------------- |
|
506 // CNotMtmUi::ViewL |
|
507 // --------------------------------------------------------- |
|
508 // |
|
509 CMsvOperation* CNotMtmUi::ViewL( TRequestStatus& aStatus, |
|
510 const CMsvEntrySelection& aSelection ) |
|
511 { |
|
512 __ASSERT_DEBUG( iBaseMtm.Entry().Entry().iMtm == Type(), Panic( EMmsWrongMtm ) ); |
|
513 BaseMtm().SwitchCurrentEntryL( aSelection[0] ); |
|
514 return ViewL( aStatus ); |
|
515 } |
|
516 |
|
517 // ----------------------------------------------------------------------------- |
|
518 // CNotMtmUi::LaunchEditorApplicationL() |
|
519 // Does the actual opening. |
|
520 // ----------------------------------------------------------------------------- |
|
521 // |
|
522 CMsvOperation* CNotMtmUi::LaunchEditorApplicationL( TRequestStatus& aStatus, |
|
523 CMsvSession& aSession, |
|
524 TEditorType aEditorType ) |
|
525 { |
|
526 LOGTEXT(_L8("NotMtmUi: LaunchEditorApplicationL start")); |
|
527 TEditorParameters temp; |
|
528 |
|
529 if ( iBaseMtm.HasContext() ) |
|
530 { |
|
531 temp.iId=iBaseMtm.Entry().EntryId(); |
|
532 } |
|
533 |
|
534 TMsvEntry tempEntry = iBaseMtm.Entry( ).Entry(); |
|
535 |
|
536 CMtmUiDataRegistry* mtmUiDataReg = CMtmUiDataRegistry::NewL( Session( ) ); |
|
537 CleanupStack::PushL( mtmUiDataReg ); |
|
538 |
|
539 CBaseMtmUiData* uiData=mtmUiDataReg->NewMtmUiDataLayerL( this->Type( ) ) ; |
|
540 CleanupStack::PushL( uiData ); |
|
541 |
|
542 TBool supported = ETrue; |
|
543 |
|
544 if( uiData->OperationSupportedL( KMtmUiFunctionOpenMessage, tempEntry ) ) |
|
545 { // Returns value other than zero if operation is not supported |
|
546 supported = EFalse; |
|
547 } |
|
548 |
|
549 CleanupStack::PopAndDestroy( 2, mtmUiDataReg ); |
|
550 |
|
551 if( !supported ) |
|
552 { |
|
553 User::Leave( KErrNotSupported ); |
|
554 } |
|
555 |
|
556 switch( aEditorType ) |
|
557 { |
|
558 case EReadOnly: |
|
559 temp.iFlags|=EMsgReadOnly; |
|
560 break; |
|
561 case ECreateNewMessage: |
|
562 temp.iFlags|=EMsgCreateNewMessage ; |
|
563 temp.iId=KMsvDraftEntryIdValue; |
|
564 break; |
|
565 case EEditExisting: //flow through |
|
566 default: |
|
567 break; |
|
568 }; |
|
569 |
|
570 temp.iFlags &= ~( EMtmUiFlagEditorPreferEmbedded|EMtmUiFlagEditorNoWaitForExit ); |
|
571 |
|
572 temp.iFlags |= ( Preferences() & EMtmUiFlagEditorPreferEmbedded?EMsgLaunchEditorEmbedded:0 ); |
|
573 |
|
574 TPckgC<TEditorParameters> paramPack( temp ); |
|
575 |
|
576 LOGTEXT( _L8( "Just before calling MsgEditorLauncher" ) ); |
|
577 return MsgEditorLauncher::LaunchEditorApplicationL( aSession, Type(), aStatus, temp, KNullDesC(), paramPack ); |
|
578 } |
|
579 |
|
580 // --------------------------------------------------------- |
|
581 // CNotMtmUi::ForwardL |
|
582 // --------------------------------------------------------- |
|
583 // |
|
584 CMsvOperation* CNotMtmUi::ForwardL( TMsvId aDestination, |
|
585 TMsvPartList aPartList, |
|
586 TRequestStatus& aCompletionStatus ) |
|
587 { |
|
588 LOGTEXT(_L8("NotMtmUi: ForwardL start")); |
|
589 TEditorParameters editorParams; |
|
590 editorParams.iFlags &= ~( EMtmUiFlagEditorPreferEmbedded | EMtmUiFlagEditorNoWaitForExit ); |
|
591 |
|
592 editorParams.iFlags |= ( ( Preferences() & EMtmUiFlagEditorPreferEmbedded ) ? EMsgLaunchEditorEmbedded : 0 ); |
|
593 editorParams.iDestinationFolderId = aDestination; |
|
594 editorParams.iPartList = aPartList; |
|
595 |
|
596 editorParams.iFlags |= EMsgForwardMessage; |
|
597 editorParams.iId=BaseMtm().Entry().EntryId(); |
|
598 |
|
599 //we need to check access points here |
|
600 CMmsSettingsDialog::TMmsExitCode exitCode = CMmsSettingsDialog::EMmsExternalInterrupt; |
|
601 if ( !CheckSettingsL( exitCode ) ) |
|
602 { |
|
603 TInt32 ap = iSettingsHandler->MmsSettings()->AccessPoint( 0 ); |
|
604 if( exitCode == CMmsSettingsDialog::EMmsBack && ApExistsL( ap ) ) |
|
605 { |
|
606 LOGTEXT( _L8( "NotMtmUi::ForwardL launching editor" ) ); |
|
607 return MsgEditorLauncher::LaunchEditorApplicationL( Session(), |
|
608 Type(), |
|
609 aCompletionStatus, |
|
610 editorParams, |
|
611 KNullDesC() ); |
|
612 } |
|
613 else//user selects exit and settings not saved |
|
614 { |
|
615 return CompleteSettingsOperationL( aCompletionStatus, exitCode ); |
|
616 } |
|
617 }//if |
|
618 |
|
619 LOGTEXT( _L8( "NotMtmUi::ForwardL launching editor" ) ); |
|
620 return MsgEditorLauncher::LaunchEditorApplicationL( Session(), |
|
621 Type(), |
|
622 aCompletionStatus, |
|
623 editorParams, |
|
624 KNullDesC() ); |
|
625 } |
|
626 |
|
627 // --------------------------------------------------------- |
|
628 // CNotMtmUi::ReplyL |
|
629 // --------------------------------------------------------- |
|
630 // |
|
631 CMsvOperation* CNotMtmUi::ReplyL( TMsvId aDestination, |
|
632 TMsvPartList aPartList, |
|
633 TRequestStatus& aCompletionStatus ) |
|
634 { |
|
635 LOGTEXT(_L8("NotMtmUi: Reply start")); |
|
636 TEditorParameters editorParams; |
|
637 editorParams.iFlags |= EMsgReplyToMessageSender; |
|
638 editorParams.iId = BaseMtm().Entry().EntryId(); |
|
639 editorParams.iDestinationFolderId = aDestination; |
|
640 editorParams.iPartList = aPartList; |
|
641 editorParams.iSpecialAppId = KUidUniEditor; |
|
642 editorParams.iFlags &= ~( EMtmUiFlagEditorPreferEmbedded | EMtmUiFlagEditorNoWaitForExit ); |
|
643 |
|
644 editorParams.iFlags |= ( ( Preferences() & EMtmUiFlagEditorPreferEmbedded ) ? EMsgLaunchEditorEmbedded : 0 ); |
|
645 |
|
646 //we need to check access points here |
|
647 CMmsSettingsDialog::TMmsExitCode exitCode = CMmsSettingsDialog::EMmsExternalInterrupt; |
|
648 if ( !CheckSettingsL( exitCode ) ) |
|
649 { |
|
650 TInt32 ap = iSettingsHandler->MmsSettings()->AccessPoint( 0 ); |
|
651 if( exitCode == CMmsSettingsDialog::EMmsBack && ApExistsL( ap ) ) |
|
652 { |
|
653 LOGTEXT( _L8( "NotMtmUi::ReplyL launching editor" ) ); |
|
654 return MsgEditorLauncher::LaunchEditorApplicationL( Session(), |
|
655 Type(), |
|
656 aCompletionStatus, |
|
657 editorParams, |
|
658 KNullDesC() ); |
|
659 } |
|
660 else//user selects exit and settings not saved |
|
661 { |
|
662 return CompleteSettingsOperationL( aCompletionStatus, exitCode ); |
|
663 } |
|
664 } |
|
665 |
|
666 //Setting the entry always to read as done for sms |
|
667 if ( BaseMtm().Entry().Entry().Unread() ) |
|
668 { |
|
669 CMsvEntry* cEntry; |
|
670 cEntry = &(BaseMtm().Entry()); |
|
671 TMsvEntry entry = cEntry->Entry(); |
|
672 entry.SetUnread( EFalse ); |
|
673 cEntry->ChangeL( entry ); |
|
674 } |
|
675 |
|
676 LOGTEXT( _L8( "NotMtmUi::ReplyL launching editor" ) ); |
|
677 return MsgEditorLauncher::LaunchEditorApplicationL( Session(), |
|
678 Type(), |
|
679 aCompletionStatus, |
|
680 editorParams, |
|
681 KNullDesC() ); |
|
682 } |
|
683 |
|
684 // --------------------------------------------------------- |
|
685 // CNotMtmUi::CancelL |
|
686 // Suspends sending of the selected messages (if possible) |
|
687 // --------------------------------------------------------- |
|
688 // |
|
689 CMsvOperation* CNotMtmUi::CancelL( TRequestStatus& aStatus, |
|
690 const CMsvEntrySelection& aSelection ) |
|
691 { |
|
692 TInt count = aSelection.Count(); |
|
693 __ASSERT_DEBUG( count, Panic( EMmsWrongParameters ) ); |
|
694 |
|
695 CMsvEntry* entry = Session().GetEntryL( aSelection[0] ); |
|
696 CleanupStack::PushL( entry ); |
|
697 |
|
698 while ( count-- ) |
|
699 { |
|
700 entry->SetEntryL( aSelection[count] ); |
|
701 TMsvEntry tempEntry = entry->Entry(); |
|
702 tempEntry.SetSendingState( KMsvSendStateSuspended ); |
|
703 |
|
704 tempEntry.iDate.UniversalTime(); |
|
705 |
|
706 entry->ChangeL( tempEntry ); |
|
707 } |
|
708 |
|
709 CleanupStack::PopAndDestroy(); // entry |
|
710 |
|
711 TBuf8<1> dummyParams; |
|
712 dummyParams.Zero(); |
|
713 return CBaseMtmUi::InvokeAsyncFunctionL( EMmsDeleteSchedule, aSelection, aStatus, dummyParams ); |
|
714 } |
|
715 |
|
716 // --------------------------------------------------------- |
|
717 // CNotMtmUi::InvokeSyncFunctionL |
|
718 // --------------------------------------------------------- |
|
719 // |
|
720 void CNotMtmUi::InvokeSyncFunctionL( TInt aFunctionId, |
|
721 const CMsvEntrySelection& aSelection, |
|
722 TDes8& aParameter ) |
|
723 { |
|
724 LOGTEXT(_L8("NotMtmUi: InvokeSyncFuntionL start")); |
|
725 switch ( aFunctionId ) |
|
726 { |
|
727 case KMtmUiMessagingInitialisation: |
|
728 LOGTEXT(_L8("NotMtmUi: InvokeSyncFuntionL MsgIni")); |
|
729 CreateDefaultSettingsL(); |
|
730 break; |
|
731 case KMtmUiFunctionRestoreFactorySettings: |
|
732 LOGTEXT(_L8("NotMtmUi: InvokeSyncFuntionL FactorySetts")); |
|
733 HandleFactorySettingsL( aParameter ); |
|
734 break; |
|
735 case KMtmUiFunctionValidateService: |
|
736 { |
|
737 LOGTEXT(_L8("NotMtmUi: InvokeSyncFuntionL ValidateService")); |
|
738 iSettingsHandler->RefreshSettingsL( ); |
|
739 TInt error = iSettingsHandler->MmsSettings()->ValidateSettings(); |
|
740 // return the result via aParameter as a TInt packaged into a TDes8 |
|
741 TPckgBuf<TInt> resultPackage( error ); |
|
742 aParameter.Copy( resultPackage ); |
|
743 } |
|
744 break; |
|
745 default: |
|
746 CBaseMtmUi::InvokeSyncFunctionL( aFunctionId, aSelection, aParameter ); |
|
747 break; |
|
748 } |
|
749 LOGTEXT(_L8("NotMtmUi: InvokeSyncFunctionL end")); |
|
750 } |
|
751 |
|
752 // --------------------------------------------------------- |
|
753 // CNotMtmUi::InvokeAsyncFunctionL |
|
754 // --------------------------------------------------------- |
|
755 // |
|
756 CMsvOperation* CNotMtmUi::InvokeAsyncFunctionL( TInt aFunctionId, |
|
757 const CMsvEntrySelection& aSelection, |
|
758 TRequestStatus& aCompletionStatus, |
|
759 TDes8& aParameter ) |
|
760 { |
|
761 LOGTEXT(_L8("NotMtmUi: InvokeAsyncFuntionL start")); |
|
762 CMsvOperation* msvoperation = NULL; |
|
763 switch ( aFunctionId ) |
|
764 { |
|
765 case KMtmUiFunctionMessageInfo: |
|
766 LOGTEXT(_L8("NotMtmUi: InvokeAsyncFuntionL MsgInfo")); |
|
767 msvoperation = OpenMessageInfoL( aCompletionStatus, aParameter ); |
|
768 break; |
|
769 case KMtmUiFunctionMMBox: |
|
770 LOGTEXT(_L8("NotMtmUi: InvokeAsyncFuntionL MMBox")); |
|
771 msvoperation = OpenMMBoxDialogL( aCompletionStatus ); |
|
772 break; |
|
773 case KMtmUiFunctionFetchMMS: |
|
774 LOGTEXT(_L8("NotMtmUi: InvokeAsyncFuntionL Fetch")); |
|
775 if( iNotUiFlags & EOffline |
|
776 && IS_PHONE_OFF_LINEL() ) |
|
777 { // We are in offline at the moment -> Infonote |
|
778 ShowInformationNoteL( R_NOTMTM_OFFLINE_NOT_POSSIBLE, EFalse ); |
|
779 break; |
|
780 } |
|
781 msvoperation = StartFetchingL( aSelection, aCompletionStatus ); |
|
782 break; |
|
783 case KMtmUiFunctionDeleteMessage: |
|
784 LOGTEXT(_L8("NotMtmUi: InvokeAsyncFuntionL Delete")); |
|
785 msvoperation = StartDeletingL( aSelection, aCompletionStatus ); |
|
786 break; |
|
787 default: |
|
788 break; |
|
789 } |
|
790 LOGTEXT(_L8("NotMtmUi: InvokeAsyncFuntionL end")); |
|
791 return msvoperation; |
|
792 } |
|
793 |
|
794 // --------------------------------------------------------- |
|
795 // CNotMtmUi::DisplayProgressSummary |
|
796 // --------------------------------------------------------- |
|
797 // |
|
798 TInt CNotMtmUi::DisplayProgressSummary( const TDesC8& /* aProgress */ ) const |
|
799 { |
|
800 // This does nothing, because MsgErrorWatcher shows all MMS error messages. |
|
801 // Furthermore currently MMS engine does not return any sensible progress to report. |
|
802 return KErrNone; |
|
803 } |
|
804 |
|
805 // --------------------------------------------------------- |
|
806 // CNotMtmUi::GetResourceFileName |
|
807 // --------------------------------------------------------- |
|
808 // |
|
809 void CNotMtmUi::GetResourceFileName( TFileName& aFileName ) const |
|
810 { |
|
811 aFileName = KNotMtmResourceFile; |
|
812 } |
|
813 |
|
814 // --------------------------------------------------------- |
|
815 // CNotMtmUi::CreateDefaultSettingsL |
|
816 // --------------------------------------------------------- |
|
817 // |
|
818 void CNotMtmUi::CreateDefaultSettingsL() |
|
819 { |
|
820 // done in engine by FactorySettings |
|
821 } |
|
822 |
|
823 // --------------------------------------------------------- |
|
824 // CNotMtmUi::HandleFactorySettingsL |
|
825 // Reset Factory Settings support |
|
826 // --------------------------------------------------------- |
|
827 EXPORT_C void CNotMtmUi::HandleFactorySettingsL( TDes8& aLevel ) |
|
828 { |
|
829 iSettingsHandler->HandleFactorySettingsL( aLevel ); |
|
830 } |
|
831 |
|
832 // --------------------------------------------------------- |
|
833 // CNotMtmUi::DeleteFromQuery() |
|
834 // Queries from the user where the notifications |
|
835 // or messages are being deleted from |
|
836 // --------------------------------------------------------- |
|
837 TInt CNotMtmUi::DeleteFromQueryL( TInt& result ) |
|
838 { |
|
839 LOGTEXT(_L8("NotMtmUi: DeleteFromQuery start")); |
|
840 TInt index = 0; |
|
841 CAknListQueryDialog* dlg = new (ELeave) CAknListQueryDialog( &index ); |
|
842 dlg->PrepareLC( R_NOTUI_DELETE_FROM_QUERY ); |
|
843 |
|
844 // Populate list query array |
|
845 CDesCArrayFlat *array = new(ELeave) CDesCArrayFlat(3); |
|
846 CleanupStack::PushL(array); |
|
847 HBufC* buf = StringLoader::LoadLC( R_NOTMTM_DELETE_QUERY_BOTHLOCALANDREMOTE ); |
|
848 array->AppendL( *buf ); |
|
849 CleanupStack::PopAndDestroy(); //buf |
|
850 buf = StringLoader::LoadLC( R_NOTMTM_DELETE_QUERY_LOCALONLY ); |
|
851 array->AppendL( *buf ); |
|
852 CleanupStack::PopAndDestroy(); //buf |
|
853 buf = StringLoader::LoadLC( R_NOTMTM_DELETE_QUERY_REMOTEONLY ); |
|
854 array->AppendL( *buf ); |
|
855 CleanupStack::PopAndDestroy(); //buf |
|
856 dlg->SetItemTextArray( array ); |
|
857 CleanupStack::Pop(); //array |
|
858 |
|
859 TInt queryOk = dlg->RunLD(); |
|
860 if( queryOk ) |
|
861 { |
|
862 /* list query approved, index is usable to see what list item was selected */ |
|
863 switch( index ) |
|
864 { |
|
865 case 0: |
|
866 result = EMmsDeleteBoth; |
|
867 break; |
|
868 case 1: |
|
869 result = EMmsDeleteNotificationOnly; |
|
870 break; |
|
871 case 2: |
|
872 default: |
|
873 result = EMmsDeleteMMBoxOnly; |
|
874 break; |
|
875 }; |
|
876 } |
|
877 else |
|
878 { |
|
879 /* list query cancelled, index is unusable */ |
|
880 } |
|
881 LOGTEXT(_L8("NotMtmUi: DeleteFromQueryL end")); |
|
882 return queryOk; |
|
883 } |
|
884 |
|
885 // --------------------------------------------------------- |
|
886 // CMsvOperation* CNotMtmUi::OpenServiceSettingsDialogL(TRequestStatus& aCompletionStatus) |
|
887 // Handles MMS service settings |
|
888 // --------------------------------------------------------- |
|
889 // |
|
890 EXPORT_C CMsvOperation* CNotMtmUi::OpenServiceSettingsDialogL( TRequestStatus& aCompletionStatus ) |
|
891 { |
|
892 return iSettingsHandler->OpenServiceSettingsDialogL( aCompletionStatus ); |
|
893 } |
|
894 |
|
895 // --------------------------------------------------------- |
|
896 // CheckSettingsL |
|
897 // --------------------------------------------------------- |
|
898 // |
|
899 TBool CNotMtmUi::CheckSettingsL( ) |
|
900 { |
|
901 CMmsSettingsDialog::TMmsExitCode exitCode = CMmsSettingsDialog::EMmsExternalInterrupt; |
|
902 if ( !CheckSettingsL( exitCode ) ) |
|
903 { |
|
904 TInt32 ap = iSettingsHandler->MmsSettings()->AccessPoint( 0 ); |
|
905 if( !( exitCode==CMmsSettingsDialog::EMmsBack && ApExistsL( ap ) ) ) |
|
906 { |
|
907 return EFalse; |
|
908 } |
|
909 } |
|
910 return ETrue; |
|
911 } |
|
912 |
|
913 // --------------------------------------------------------- |
|
914 // CMsvOperation* CNotMtmUi::CompleteSettingsOperationL( |
|
915 // TRequestStatus& aCompletionStatus, const CMmsSettingsDialog::TMmsExitCode& aExitCode) |
|
916 // Creates completed operation after settings dialog closing with appropriate parameters. |
|
917 // --------------------------------------------------------- |
|
918 // |
|
919 EXPORT_C CMsvOperation* CNotMtmUi::CompleteSettingsOperationL( |
|
920 TRequestStatus& aCompletionStatus, |
|
921 const CMmsSettingsDialog::TMmsExitCode& aExitCode /* = CMmsSettingsDialog::EMmsExternalInterrupt */ ) |
|
922 { |
|
923 return iSettingsHandler->CompleteSettingsOperationL( |
|
924 aCompletionStatus, |
|
925 aExitCode ); |
|
926 } |
|
927 |
|
928 // --------------------------------------------------------- |
|
929 // TInt CNotMtmUi::LaunchSettingsDialogL( |
|
930 // CMmsSettingsDialog::TMmsExitCode& aExitCode ) |
|
931 // Opens either MMS Service Settings or MMS Sending Settings dialog. |
|
932 // --------------------------------------------------------- |
|
933 // |
|
934 EXPORT_C void CNotMtmUi::LaunchSettingsDialogL( |
|
935 CMmsSettingsDialog::TMmsExitCode& aExitCode ) const |
|
936 { |
|
937 iSettingsHandler->LaunchSettingsDialogL( aExitCode ); |
|
938 } |
|
939 |
|
940 |
|
941 // --------------------------------------------------------- |
|
942 // CNotMtmUi::OpenMessageInfoL(TRequestStatus& aCompletionStatus, TDes8& aParameter) |
|
943 // Opens the Message Info popup. |
|
944 // --------------------------------------------------------- |
|
945 // |
|
946 CMsvOperation* CNotMtmUi::OpenMessageInfoL( TRequestStatus& aCompletionStatus, |
|
947 TDes8& /*aParameter*/ ) |
|
948 { |
|
949 LOGTEXT( _L8( "NotMtmUi OpenMessageInfo start" ) ); |
|
950 TInt popCount( 0 ); |
|
951 |
|
952 // The items for Info are read from the message entry. |
|
953 // Note: Most of the stuff is in TMsvEntry, but not all -> MMS entry used all the way. |
|
954 TMmsMsvEntry entry = static_cast<TMmsMsvEntry>( BaseMtm().Entry().Entry() ); |
|
955 __ASSERT_DEBUG( entry.iType==KUidMsvMessageEntry, Panic( EMmsNotAMessage ) ); |
|
956 __ASSERT_DEBUG( entry.iMtm==Type(), Panic( EMmsWrongMtm ) ); |
|
957 |
|
958 iMmsClient.LoadMessageL(); |
|
959 |
|
960 TMsgInfoMessageInfoData infoData; |
|
961 |
|
962 // From - show only for received messages |
|
963 if ( entry.IsMobileTerminated() ) |
|
964 { |
|
965 HBufC* senderNumber = iMmsClient.Sender().AllocLC(); |
|
966 popCount++; |
|
967 // Additional space for chars: '<' '>' ',' + 2 x KMmsLRMarker |
|
968 HBufC* fromText = HBufC::NewLC( entry.iDetails.Length() + senderNumber->Length() + KMmsAdditionalCharsStringLength ); |
|
969 popCount++; |
|
970 |
|
971 // Do we have alias? |
|
972 if ( senderNumber->Compare( entry.iDetails ) ) |
|
973 { // yes |
|
974 TPtr fromTextPtr = fromText->Des(); |
|
975 fromTextPtr.Append( entry.iDetails ); |
|
976 fromTextPtr.Append( KMmsCharSpace ); |
|
977 fromTextPtr.Append( KMmsLRMarker ); |
|
978 fromTextPtr.Append( KCharLeftAddressIterator ); |
|
979 fromTextPtr.Append( TMmsGenUtils::PureAddress( senderNumber->Des( ) ) ); |
|
980 fromTextPtr.Append( KCharRightAddressIterator ); |
|
981 fromTextPtr.Append( KMmsLRMarker ); |
|
982 infoData.iFrom.Set( *fromText ); |
|
983 } |
|
984 else |
|
985 { // no |
|
986 infoData.iFrom.Set( *senderNumber ); |
|
987 } |
|
988 } |
|
989 |
|
990 // Subject |
|
991 infoData.iSubject.Set( iMmsClient.SubjectL() ); |
|
992 |
|
993 // Supply UTC date-time to message info |
|
994 infoData.iDateTime = entry.iDate; |
|
995 |
|
996 // Type of message -taken directly from resources as this must be a multimedia message |
|
997 HBufC* msgType = StringLoader::LoadLC( R_NOT_TYPE_TEXT, iCoeEnv ); |
|
998 popCount++; |
|
999 infoData.iType.Set( msgType->Des() ); |
|
1000 |
|
1001 // Priority of message |
|
1002 HBufC* priority = NULL; |
|
1003 switch ( iMmsClient.MessagePriority() ) |
|
1004 { |
|
1005 case EMmsPriorityHigh: |
|
1006 { |
|
1007 priority = StringLoader::LoadLC( R_MMS_MESSAGE_PRIORITY_HIGH, iCoeEnv ); |
|
1008 popCount++; |
|
1009 infoData.iPriority.Set( *priority); |
|
1010 break; |
|
1011 } |
|
1012 case EMmsPriorityLow: |
|
1013 { |
|
1014 priority = StringLoader::LoadLC( R_MMS_MESSAGE_PRIORITY_LOW, iCoeEnv ); |
|
1015 popCount++; |
|
1016 infoData.iPriority.Set( *priority); |
|
1017 break; |
|
1018 } |
|
1019 case EMmsPriorityNormal: |
|
1020 { |
|
1021 priority = StringLoader::LoadLC( R_MMS_MESSAGE_PRIORITY_NORMAL, iCoeEnv ); |
|
1022 popCount++; |
|
1023 infoData.iPriority.Set( *priority); |
|
1024 break; |
|
1025 } |
|
1026 default: // Do not show the priority if it's not set |
|
1027 break; |
|
1028 } |
|
1029 |
|
1030 // Size of message. |
|
1031 TInt size = iMmsClient.MessageTransferSize( ); |
|
1032 TInt maxSize = static_cast<TInt>( |
|
1033 iSettingsHandler->MmsSettings()->MaximumReceiveSize() ); |
|
1034 |
|
1035 if( maxSize > 0 ) |
|
1036 { |
|
1037 if( size > maxSize ) |
|
1038 { |
|
1039 size = maxSize; |
|
1040 } |
|
1041 } |
|
1042 |
|
1043 // Finally make the UI string |
|
1044 TBuf<KMessageSize> sizeString; |
|
1045 MessageSizeToStringL( sizeString, size ); |
|
1046 infoData.iSize.Set( sizeString ); |
|
1047 |
|
1048 // To |
|
1049 const CMsvRecipientList& recipients = iMmsClient.AddresseeList(); |
|
1050 TInt count = recipients.Count(); |
|
1051 TPtrC separatorPtr( KAddressSeparator ); |
|
1052 |
|
1053 // Calculate size needed |
|
1054 TInt index; |
|
1055 TInt toSize = 0; |
|
1056 |
|
1057 for ( index = 0; index < count; index++ ) |
|
1058 { |
|
1059 toSize += recipients[index].Length(); |
|
1060 if ( index < ( count - 1 ) ) |
|
1061 { // not the last address, add separator space |
|
1062 toSize += separatorPtr.Length(); |
|
1063 } |
|
1064 } |
|
1065 |
|
1066 if ( toSize ) |
|
1067 { |
|
1068 // Form the to-string |
|
1069 HBufC* toList = TurnRecipientsArrayIntoStringLC( recipients ); |
|
1070 popCount++; |
|
1071 infoData.iTo.Set( *toList ); |
|
1072 } |
|
1073 |
|
1074 CMsgInfoMessageInfoDialog* infoDialog = CMsgInfoMessageInfoDialog::NewL(); |
|
1075 |
|
1076 if ( entry.IsMobileTerminated() ) |
|
1077 { |
|
1078 infoDialog->ExecuteLD( infoData, CMsgInfoMessageInfoDialog::EMmsViewer ); |
|
1079 } |
|
1080 else |
|
1081 { |
|
1082 infoDialog->ExecuteLD( infoData, CMsgInfoMessageInfoDialog::EMmsEditor ); |
|
1083 } |
|
1084 |
|
1085 CleanupStack::PopAndDestroy( popCount ); |
|
1086 return CMsvCompletedOperation::NewL( Session(), |
|
1087 KUidMsvLocalServiceMtm, |
|
1088 KNullDesC8, |
|
1089 KMsvLocalServiceIndexEntryId, |
|
1090 aCompletionStatus ); |
|
1091 } |
|
1092 |
|
1093 |
|
1094 // --------------------------------------------------------- |
|
1095 // CNotMtmUi::OpenMMBoxDialogL |
|
1096 // Opens the MMBox Dialog |
|
1097 // --------------------------------------------------------- |
|
1098 // |
|
1099 CMsvOperation* CNotMtmUi::OpenMMBoxDialogL( TRequestStatus& aCompletionStatus ) |
|
1100 { |
|
1101 LOGTEXT( _L8( "NotMtmUi OpenMMBoxDialog start" ) ); |
|
1102 |
|
1103 TInt exitCode; |
|
1104 |
|
1105 CMtmUiDataRegistry* mtmUiDataReg = CMtmUiDataRegistry::NewL( Session( ) ); |
|
1106 CleanupStack::PushL( mtmUiDataReg ); |
|
1107 |
|
1108 CBaseMtmUiData* mtmUiData = mtmUiDataReg->NewMtmUiDataLayerL( this->Type( ) ); |
|
1109 CleanupStack::PushL( mtmUiData ); |
|
1110 CNotMtmUiData* uiData = static_cast<CNotMtmUiData*> ( mtmUiData ); |
|
1111 |
|
1112 CMMBoxDialog* dialog = CMMBoxDialog::NewL( *this, *uiData, Session(), exitCode ); |
|
1113 |
|
1114 dialog->ExecuteLD( R_NOT_MMBOX_DIALOG ); |
|
1115 |
|
1116 CleanupStack::PopAndDestroy( mtmUiData ); |
|
1117 CleanupStack::PopAndDestroy( mtmUiDataReg ); |
|
1118 |
|
1119 return CMsvCompletedOperation::NewL( Session(), |
|
1120 KUidMsvLocalServiceMtm, |
|
1121 KNullDesC8, |
|
1122 KMsvLocalServiceIndexEntryId, |
|
1123 aCompletionStatus ); |
|
1124 } |
|
1125 |
|
1126 |
|
1127 |
|
1128 // --------------------------------------------------------- |
|
1129 // CNotMtmUi::StartFetchingL |
|
1130 // --------------------------------------------------------- |
|
1131 // |
|
1132 CMsvOperation* CNotMtmUi::StartFetchingL( |
|
1133 const CMsvEntrySelection& aSelection, |
|
1134 TRequestStatus& aCompletionStatus ) |
|
1135 { |
|
1136 LOGTEXT( _L8( "NotMtmUi StartFetchingL start" ) ); |
|
1137 // Lets check the expiration if only one notification |
|
1138 if( aSelection.Count( ) == 1 ) |
|
1139 { |
|
1140 TMsvEntry entry; |
|
1141 TMsvId service=-1; |
|
1142 Session().GetEntry( aSelection.At( 0 ), service, entry ); |
|
1143 if( entry.Parent( ) == KMsvGlobalInBoxIndexEntryId ) |
|
1144 { // We are in Inbox |
|
1145 TMsvId origId = iMmsClient.Entry().Entry().Id(); |
|
1146 iMmsClient.SwitchCurrentEntryL( aSelection.At( 0 ) ); |
|
1147 iMmsClient.LoadMessageL( ); |
|
1148 TTime currentTime; |
|
1149 currentTime.HomeTime( ); |
|
1150 TTime expiryTime = iMmsClient.ExpiryDate( ); |
|
1151 iMmsClient.SwitchCurrentEntryL( origId ); |
|
1152 iMmsClient.LoadMessageL( ); |
|
1153 TLocale locale; |
|
1154 expiryTime += locale.UniversalTimeOffset(); |
|
1155 if (locale.QueryHomeHasDaylightSavingOn()) |
|
1156 { |
|
1157 TTimeIntervalHours daylightSaving(1); |
|
1158 expiryTime += daylightSaving; |
|
1159 } |
|
1160 |
|
1161 if( currentTime > expiryTime ) |
|
1162 { // Message is expired |
|
1163 TBool res = EFalse; |
|
1164 TRAPD( err, res=ShowConfirmationQueryL( R_NOT_MMBOX_QUEST_MSG_EXPIRED ) ); |
|
1165 if ( err || !res ) |
|
1166 { // User did not want to fetch expired message or the function leaved |
|
1167 CMmsSettingsDialog::TMmsExitCode exitCode = CMmsSettingsDialog::EMmsBack; |
|
1168 return CompleteSettingsOperationL( aCompletionStatus, exitCode ); |
|
1169 } // else we continue |
|
1170 } |
|
1171 } |
|
1172 } |
|
1173 |
|
1174 //we need to check access points here |
|
1175 CMmsSettingsDialog::TMmsExitCode exitCode = CMmsSettingsDialog::EMmsExternalInterrupt; |
|
1176 if ( !CheckSettingsL( exitCode ) ) |
|
1177 { |
|
1178 TInt32 ap = iSettingsHandler->MmsSettings()->AccessPoint( 0 ); |
|
1179 //settings saved |
|
1180 if( exitCode==CMmsSettingsDialog::EMmsBack && ApExistsL( ap ) ) |
|
1181 { |
|
1182 CMsvOperation* op = NULL; |
|
1183 CAknInputBlock* abs = CAknInputBlock::NewLC( ); |
|
1184 TRAP_IGNORE( op = iMmsClient.FetchMessagesL( aSelection, aCompletionStatus) ); |
|
1185 CleanupStack::PopAndDestroy( abs ); |
|
1186 return op; |
|
1187 } |
|
1188 else//user selects exit and settings not saved |
|
1189 { |
|
1190 return CompleteSettingsOperationL( aCompletionStatus, exitCode ); |
|
1191 } |
|
1192 } |
|
1193 else |
|
1194 { |
|
1195 // OK - settings ok and fetch could be done |
|
1196 CAknInputBlock* abs = CAknInputBlock::NewLC( ); |
|
1197 CMsvOperation* op = NULL; |
|
1198 TRAP_IGNORE( op = iMmsClient.FetchMessagesL( aSelection, aCompletionStatus) ); |
|
1199 CleanupStack::PopAndDestroy( abs ); |
|
1200 return op; |
|
1201 } |
|
1202 } |
|
1203 |
|
1204 // --------------------------------------------------------- |
|
1205 // CNotMtmUi::StartDeletingL |
|
1206 // --------------------------------------------------------- |
|
1207 // |
|
1208 CMsvOperation* CNotMtmUi::StartDeletingL( |
|
1209 const CMsvEntrySelection& aSelection, |
|
1210 TRequestStatus& aCompletionStatus ) |
|
1211 { |
|
1212 LOGTEXT( _L8( "NotMtmUi StartDeletingL start" ) ); |
|
1213 |
|
1214 CMsvOperation* msvoperation = NULL; |
|
1215 |
|
1216 if( aSelection.Count( ) == 0 ) |
|
1217 { // Nothing to delete |
|
1218 return msvoperation; |
|
1219 } |
|
1220 |
|
1221 if( aSelection.Count( ) > 1 ) |
|
1222 { |
|
1223 iFlags |= EDeletingMany; |
|
1224 } |
|
1225 else |
|
1226 { |
|
1227 iFlags &= ~EDeletingMany; |
|
1228 } |
|
1229 |
|
1230 iFlags &= ~EDeletingFromMMBox; |
|
1231 |
|
1232 TInt deleteMode(-1); |
|
1233 |
|
1234 CMsvEntry* cEntry = Session().GetEntryL( aSelection[0] ); |
|
1235 CleanupStack::PushL( cEntry ); |
|
1236 |
|
1237 TMsvEntry entry = cEntry->Entry( ); |
|
1238 |
|
1239 CleanupStack::PopAndDestroy(); //cEntry |
|
1240 |
|
1241 if( entry.Parent( ) == KMsvGlobalInBoxIndexEntryId |
|
1242 || entry.Parent( ) == iMmsClient.GetMmboxFolderL( ) ) |
|
1243 { |
|
1244 if( iNotUiFlags & EOffline |
|
1245 && IS_PHONE_OFF_LINEL() ) |
|
1246 { // We are in offline at the moment -> Infonote |
|
1247 ShowInformationNoteL( R_NOTMTM_OFFLINE_NOT_POSSIBLE, EFalse ); |
|
1248 return msvoperation; |
|
1249 } |
|
1250 } |
|
1251 |
|
1252 if( ( entry.Parent( ) == KMsvGlobalInBoxIndexEntryId ) |
|
1253 && ( iNotUiFlags & EDeleteOptionsSupported ) |
|
1254 && DeleteQueryReallyNeededL( aSelection ) ) |
|
1255 { // Query is really needed (we r in Inbox, DeleteOptions supported |
|
1256 // and the msg has not been deleted from server yet |
|
1257 if( !( DeleteFromQueryL( deleteMode ) ) ) |
|
1258 { // Answered Cancel |
|
1259 return msvoperation; // Return NULL operation |
|
1260 } |
|
1261 if( deleteMode != EMmsDeleteNotificationOnly ) |
|
1262 { |
|
1263 iFlags |= EDeletingFromMMBox; |
|
1264 } |
|
1265 } |
|
1266 else // Either we have no options or we are deleting FR(s) |
|
1267 { |
|
1268 if( entry.Parent( ) == iMmsClient.GetMmboxFolderL( ) ) |
|
1269 { |
|
1270 iFlags |= EDeletingFromMMBox; |
|
1271 deleteMode = EMmsDeleteBoth; |
|
1272 } |
|
1273 else |
|
1274 { |
|
1275 deleteMode = EMmsDeleteNotificationOnly; |
|
1276 } |
|
1277 } |
|
1278 |
|
1279 if( deleteMode == -1 ) |
|
1280 { // For some reason deleteMode was not set |
|
1281 return msvoperation; // Return NULL operation |
|
1282 } |
|
1283 if( iFlags & EDeletingFromMMBox ) |
|
1284 { |
|
1285 CMmsSettingsDialog::TMmsExitCode exitCode = CMmsSettingsDialog::EMmsExternalInterrupt; |
|
1286 if ( !CheckSettingsL( exitCode ) ) |
|
1287 { |
|
1288 TInt32 ap = iSettingsHandler->MmsSettings()->AccessPoint( 0 ); |
|
1289 // just return NULL if the settings are not all right |
|
1290 if( !ApExistsL( ap ) ) |
|
1291 { |
|
1292 return msvoperation; |
|
1293 } |
|
1294 } |
|
1295 } |
|
1296 // Now we can start the deleting process |
|
1297 if( entry.Parent( ) == KMsvGlobalInBoxIndexEntryId |
|
1298 || entry.Parent( ) == iMmsClient.GetMmboxFolderL( ) ) |
|
1299 { // We are now in Inbox |
|
1300 |
|
1301 CMsvProgressReporterOperation* reporter = |
|
1302 CMsvProgressReporterOperation::NewL( |
|
1303 Session(), |
|
1304 aCompletionStatus, |
|
1305 EMbmAvkonQgn_note_erased ); |
|
1306 |
|
1307 CleanupStack::PushL(reporter); |
|
1308 |
|
1309 CMsvOperation* deleteop = iMmsClient.UnscheduledDeleteNotificationL( |
|
1310 aSelection, |
|
1311 (TMmsDeleteOperationType)deleteMode, |
|
1312 reporter->RequestStatus() ); |
|
1313 reporter->SetProgressDecoder( *this ); |
|
1314 reporter->SetOperationL( deleteop ); // Takes immediate ownership |
|
1315 CleanupStack::Pop(); //reporter |
|
1316 msvoperation = reporter; |
|
1317 } |
|
1318 else |
|
1319 { // We are in Outbox/Sent folder -> Synchronously Delete FR |
|
1320 TInt waitNoteId = 0; |
|
1321 waitNoteId = aSelection.Count( ) == 1? |
|
1322 R_NOTMTM_WAIT_DELETING:R_NOTMTM_WAIT_DELETING_MANY; |
|
1323 ShowWaitNoteLC( waitNoteId, ETrue); // Show deleting note |
|
1324 |
|
1325 iMmsClient.DeleteForwardEntryL( aSelection ); |
|
1326 |
|
1327 if( iWaitDialog ) |
|
1328 { |
|
1329 CleanupStack::PopAndDestroy( ); // iWaitDialog |
|
1330 iWaitDialog=NULL; |
|
1331 } |
|
1332 |
|
1333 return msvoperation; // Return NULL operation as DeleteForwardEntryL is actually synchronous |
|
1334 } |
|
1335 |
|
1336 return msvoperation; |
|
1337 } |
|
1338 |
|
1339 |
|
1340 // --------------------------------------------------------- |
|
1341 // CNotMtmUi::TurnRecipientsArrayIntoStringLC |
|
1342 // |
|
1343 // --------------------------------------------------------- |
|
1344 HBufC* CNotMtmUi::TurnRecipientsArrayIntoStringLC( const CMsvRecipientList& aRecip ) const |
|
1345 { |
|
1346 //calc length of string needed |
|
1347 TInt stringLength = 0; |
|
1348 TInt index; |
|
1349 TInt count = aRecip.Count(); |
|
1350 for( index = 0; index < count; index++ ) |
|
1351 { |
|
1352 stringLength += TMmsGenUtils::Alias( aRecip[index] ).Length(); |
|
1353 stringLength += TMmsGenUtils::PureAddress( aRecip[index] ).Length(); |
|
1354 // Additional space for chars: '<' '>' ',' + 2 x KMmsLRMarker |
|
1355 stringLength += KMmsAdditionalCharsStringLength; |
|
1356 } |
|
1357 //construct string |
|
1358 HBufC* toList = HBufC::NewLC( stringLength ); |
|
1359 for( index=0; index < count; index++ ) |
|
1360 { |
|
1361 TPtrC name = TMmsGenUtils::Alias( aRecip[index] ); |
|
1362 TPtrC number = TMmsGenUtils::PureAddress( aRecip[index] ); |
|
1363 TPtr toListPtr = toList->Des(); |
|
1364 if( name.Length()) |
|
1365 { |
|
1366 toListPtr.Append( name ); |
|
1367 toListPtr.Append( KMmsCharSpace ); |
|
1368 toListPtr.Append( KMmsLRMarker ); |
|
1369 toListPtr.Append( KCharLeftAddressIterator ); |
|
1370 toListPtr.Append( number ); |
|
1371 toListPtr.Append( KCharRightAddressIterator ); |
|
1372 toListPtr.Append( KMmsLRMarker ); |
|
1373 } |
|
1374 else |
|
1375 { |
|
1376 toListPtr.Append( number ); |
|
1377 } |
|
1378 |
|
1379 if ( index < ( count - 1 ) ) |
|
1380 { |
|
1381 toListPtr.Append( KMmsCharCommaAndSpace ); |
|
1382 } |
|
1383 } |
|
1384 |
|
1385 return toList; |
|
1386 } |
|
1387 |
|
1388 |
|
1389 |
|
1390 // --------------------------------------------------------- |
|
1391 // CNotMtmUi::MessageSizeToStringL(TDes& aTarget, TInt aFileSize) |
|
1392 // Converts message size in bytes to a kilobyte string. Rounds the bytes up to the |
|
1393 // next full kilo. I.e: |
|
1394 // 0 -> 0KB |
|
1395 // 1 -> 1KB |
|
1396 // 1024 -> 1KB |
|
1397 // 1025 -> 2KB |
|
1398 // --------------------------------------------------------- |
|
1399 // |
|
1400 void CNotMtmUi::MessageSizeToStringL( TDes& aTarget, TInt aFileSize ) const |
|
1401 { |
|
1402 TInt fileSize = aFileSize / KKiloByte; |
|
1403 if ( aFileSize % KKiloByte ) |
|
1404 { |
|
1405 fileSize++; |
|
1406 } |
|
1407 |
|
1408 HBufC* buf = StringLoader::LoadLC( R_NOT_MESSAGE_SIZE_KB, fileSize, iEikonEnv ); |
|
1409 TPtr ptr = buf->Des(); |
|
1410 ptr.Trim(); // remove possible white space from beginning |
|
1411 aTarget.Append( ptr ); |
|
1412 |
|
1413 CleanupStack::PopAndDestroy(); // buf |
|
1414 } |
|
1415 |
|
1416 // --------------------------------------------------------- |
|
1417 // CNotMtmUi::ShowConfirmationQueryL |
|
1418 // --------------------------------------------------------- |
|
1419 // |
|
1420 TInt CNotMtmUi::ShowConfirmationQueryL( TInt aResourceId ) const |
|
1421 { |
|
1422 CAknQueryDialog* dlg = CAknQueryDialog::NewL(); |
|
1423 HBufC* prompt = StringLoader::LoadLC( aResourceId, iCoeEnv ); |
|
1424 TInt retVal = dlg->ExecuteLD( R_NOTUI_CONFIRMATION_QUERY, *prompt ); |
|
1425 CleanupStack::PopAndDestroy( prompt ); |
|
1426 return retVal; |
|
1427 } |
|
1428 |
|
1429 // --------------------------------------------------------- |
|
1430 // CNotMtmUi::ApExistsL |
|
1431 // Checks the existence of given access point |
|
1432 // according to id. |
|
1433 // --------------------------------------------------------- |
|
1434 // |
|
1435 EXPORT_C TBool CNotMtmUi::ApExistsL( TInt32 aAp ) |
|
1436 { |
|
1437 return iSettingsHandler->ApExistsL( aAp ); |
|
1438 } |
|
1439 |
|
1440 // --------------------------------------------------------- |
|
1441 // ConstructWaitNoteLC |
|
1442 // --------------------------------------------------------- |
|
1443 |
|
1444 void CNotMtmUi::ConstructWaitNoteLC( |
|
1445 TBool aVisibilityDelayOff ) |
|
1446 { |
|
1447 delete iWaitDialog; |
|
1448 iWaitDialog = NULL; |
|
1449 iWaitDialog = new (ELeave) CAknWaitDialog( |
|
1450 reinterpret_cast<CEikDialog**>( &iWaitDialog ), |
|
1451 aVisibilityDelayOff ); |
|
1452 CleanupStack::PushL( TCleanupItem( CleanupWaitDialog, (TAny**)&iWaitDialog ) ); |
|
1453 iWaitDialog->PrepareLC( DELETING_WAIT_NOTE ); |
|
1454 } |
|
1455 |
|
1456 // --------------------------------------------------------- |
|
1457 // ShowWaitNoteLC |
|
1458 // --------------------------------------------------------- |
|
1459 |
|
1460 void CNotMtmUi::ShowWaitNoteLC( |
|
1461 TInt aNoteTxtResourceId, |
|
1462 TBool aVisibilityDelayOff ) |
|
1463 { |
|
1464 ConstructWaitNoteLC( aVisibilityDelayOff ); |
|
1465 HBufC* text = StringLoader::LoadLC( aNoteTxtResourceId, iCoeEnv ); |
|
1466 iWaitDialog->SetTextL( *text ); |
|
1467 CleanupStack::PopAndDestroy( ); // text |
|
1468 iWaitDialog->RunLD( ); |
|
1469 } |
|
1470 |
|
1471 // --------------------------------------------------------- |
|
1472 // CleanupWaitDialog |
|
1473 // --------------------------------------------------------- |
|
1474 // |
|
1475 void CNotMtmUi::CleanupWaitDialog( TAny* aAny ) |
|
1476 { |
|
1477 CAknWaitDialog** dialog = (CAknWaitDialog**) aAny; |
|
1478 if ( dialog && *dialog ) |
|
1479 { |
|
1480 delete *dialog; |
|
1481 // Coverty fix, Forward NULL http://ousrv057/cov.cgi?cid=36247 |
|
1482 *dialog = NULL; |
|
1483 dialog = NULL; |
|
1484 } |
|
1485 } |
|
1486 |
|
1487 //-------------------------------- |
|
1488 // DecodeProgress |
|
1489 //-------------------------------- |
|
1490 TInt CNotMtmUi::DecodeProgress( |
|
1491 const TDesC8& /*aProgress*/, |
|
1492 TBuf<CBaseMtmUi::EProgressStringMaxLen>& aReturnString, |
|
1493 TInt& aTotalEntryCount, |
|
1494 TInt& aEntriesDone, |
|
1495 TInt& aCurrentEntrySize, |
|
1496 TInt& aCurrentBytesTrans, |
|
1497 TBool /*aInternal*/ ) |
|
1498 { |
|
1499 aCurrentEntrySize = 0; |
|
1500 aCurrentBytesTrans = 0; |
|
1501 aEntriesDone = 0; |
|
1502 aTotalEntryCount = 0; |
|
1503 |
|
1504 if( iFlags & EDeletingFromMMBox ) |
|
1505 { |
|
1506 StringLoader::Load( aReturnString, |
|
1507 R_NOTMTM_WAIT_DELETING_REMOTE, |
|
1508 iCoeEnv ); |
|
1509 } |
|
1510 else if( iFlags & EDeletingMany ) |
|
1511 { |
|
1512 StringLoader::Load( aReturnString, |
|
1513 R_NOTMTM_WAIT_DELETING_MANY, |
|
1514 iCoeEnv ); |
|
1515 } |
|
1516 else |
|
1517 { |
|
1518 StringLoader::Load( aReturnString, |
|
1519 R_NOTMTM_WAIT_DELETING, |
|
1520 iCoeEnv ); |
|
1521 } |
|
1522 return KErrNone; |
|
1523 } |
|
1524 |
|
1525 //-------------------------------- |
|
1526 // DeleteQueryRequiredByMtm |
|
1527 //-------------------------------- |
|
1528 EXPORT_C TBool CNotMtmUi::DeleteQueryRequiredByMtm() |
|
1529 { |
|
1530 TBool result(EFalse); |
|
1531 if( iNotUiFlags & EDeleteOptionsSupported ) |
|
1532 { |
|
1533 return ETrue; |
|
1534 } |
|
1535 return result; |
|
1536 } |
|
1537 |
|
1538 //-------------------------------- |
|
1539 // DeleteQueryReallyNeeded |
|
1540 //-------------------------------- |
|
1541 TBool CNotMtmUi::DeleteQueryReallyNeededL( const CMsvEntrySelection& aSelection ) |
|
1542 { |
|
1543 TBool result( ETrue ); |
|
1544 if( aSelection.Count( ) == 1 ) |
|
1545 { |
|
1546 CMsvEntry* cEntry = Session().GetEntryL( aSelection[0] ); |
|
1547 CleanupStack::PushL( cEntry ); |
|
1548 |
|
1549 TMsvEntry entry = cEntry->Entry( ); |
|
1550 |
|
1551 CleanupStack::PopAndDestroy(); //cEntry |
|
1552 |
|
1553 // Delete from server is not needed if it's been deleted |
|
1554 if( ( entry.iMtmData2 & KMmsOperationFetch ) // Fetch+Forward=DELETE! |
|
1555 && ( entry.iMtmData2 & KMmsOperationForward ) // |
|
1556 && ( entry.iMtmData2 & KMmsOperationFinished ) // Finished |
|
1557 && !( entry.iMtmData2 & KMmsOperationResult ) ) // Succesfully |
|
1558 { // Returns false if only one entry available |
|
1559 // and it has been deleted from server already |
|
1560 result = EFalse; |
|
1561 } |
|
1562 } |
|
1563 return result; |
|
1564 } |
|
1565 |
|
1566 // --------------------------------------------------------- |
|
1567 // CNotMtmUi::ShowInformationNoteL |
|
1568 // --------------------------------------------------------- |
|
1569 // |
|
1570 void CNotMtmUi::ShowInformationNoteL( TInt aResourceID, TBool aWaiting ) |
|
1571 { |
|
1572 HBufC* string = NULL; |
|
1573 string = StringLoader::LoadLC( aResourceID, iCoeEnv ); |
|
1574 |
|
1575 CAknInformationNote* note = new ( ELeave ) |
|
1576 CAknInformationNote( aWaiting ); |
|
1577 note->ExecuteLD( *string ); |
|
1578 |
|
1579 CleanupStack::PopAndDestroy(); //string |
|
1580 } |
|
1581 |
|
1582 // End of File |