messagingappbase/mce/src/mceui.cpp
author hgs
Thu, 04 Nov 2010 02:02:03 +0530
changeset 81 2043ea884c04
parent 79 2981cb3aa489
permissions -rw-r--r--
201044_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  
hgs
parents:
diff changeset
    15
*     Defines methods for CMceUi
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// INCLUDE FILES
hgs
parents:
diff changeset
    23
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    24
#include <featmgr.h>
hgs
parents:
diff changeset
    25
#include <mtmuidef.hrh> 
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include <messagingvariant.hrh>
hgs
parents:
diff changeset
    28
#include <centralrepository.h>
hgs
parents:
diff changeset
    29
#include <messaginginternalcrkeys.h>
hgs
parents:
diff changeset
    30
#include <CoreApplicationUIsSDKCRKeys.h>
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
// security data caging
hgs
parents:
diff changeset
    33
#include <data_caging_path_literals.hrh>
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#include <mtudreg.h>        // cmtmuidataregistry
hgs
parents:
diff changeset
    36
#include <MTMStore.h>       // cmtmstore
hgs
parents:
diff changeset
    37
#include <miutset.h>
hgs
parents:
diff changeset
    38
#include <MuiuMsvProgressReporterOperation.h> // cmsvprogressreporteroperation
hgs
parents:
diff changeset
    39
#include <mtmdef.h>         // KUidMtmQueryCanSendMsgValue
hgs
parents:
diff changeset
    40
#include <msvids.h>
hgs
parents:
diff changeset
    41
#include <msvuids.h>
hgs
parents:
diff changeset
    42
#include <mtud.hrh>         // EMtudCommandTransferSend, EMtudCommandTransferSend, EMtudCommandTransferReceive
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
#include <MuiuMsgEmbeddedEditorWatchingOperation.h> // tmsgexitmode
hgs
parents:
diff changeset
    45
#include <MuiuOperationWait.h>  // cmuiuoperationwait
hgs
parents:
diff changeset
    46
#include <muiumsvuiserviceutilitiesinternal.h> // msvuiserviceutilitiesinternal
hgs
parents:
diff changeset
    47
#include <MuiuMsvUiServiceUtilities.h> // msvuiserviceutilities
hgs
parents:
diff changeset
    48
class CGulIcon;
hgs
parents:
diff changeset
    49
#include <MsgFolderSelectionDialog.h>
hgs
parents:
diff changeset
    50
#include <PushMtmCommands.hrh>    // epushmtmcmdcollectgarbage
hgs
parents:
diff changeset
    51
#include <smutcmds.hrh>         // KMtmUiFunctionSmumRemoveSMSC
hgs
parents:
diff changeset
    52
#include <MsgBioUids.h>     // kmsgbiouidpicturemsg
hgs
parents:
diff changeset
    53
#include <mtuireg.h>        // CMtmUiRegistry
hgs
parents:
diff changeset
    54
#include <mmsconst.h>
hgs
parents:
diff changeset
    55
#include <obexclientmtm.h>
hgs
parents:
diff changeset
    56
#include <MuiuOperationWait.h>  // cmuiuoperationwait
hgs
parents:
diff changeset
    57
#include <muiu.mbg>
hgs
parents:
diff changeset
    58
#include <muiu.rsg>
hgs
parents:
diff changeset
    59
#include <MuiuMsvUiServiceUtilities.h>
hgs
parents:
diff changeset
    60
#include <mtmuidef.hrh>
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
#include <SenduiMtmUids.h>      // mtm uids
hgs
parents:
diff changeset
    63
#include <SendUiConsts.h>
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
// MMS.Content.Upload
hgs
parents:
diff changeset
    66
#include <CSendingServiceInfo.h>
hgs
parents:
diff changeset
    67
#include <sendui.h>
hgs
parents:
diff changeset
    68
#include <CMessageData.h>
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
#include <layoutmetadata.cdl.h>//for layout id
hgs
parents:
diff changeset
    71
#include <aknappui.h>
hgs
parents:
diff changeset
    72
#include <StringLoader.h>   // stringloader
hgs
parents:
diff changeset
    73
#include <akntabgrp.h>
hgs
parents:
diff changeset
    74
#include <aknnavide.h>
hgs
parents:
diff changeset
    75
#include <aknclearer.h>
hgs
parents:
diff changeset
    76
#include <aknnotewrappers.h>
hgs
parents:
diff changeset
    77
#include <akninputblock.h> // cakninputblock
hgs
parents:
diff changeset
    78
#include <akntitle.h>
hgs
parents:
diff changeset
    79
#include <ErrorUI.h>        // cerrorui
hgs
parents:
diff changeset
    80
#include <aknnotedialog.h>
hgs
parents:
diff changeset
    81
#include <akninputblock.h> // cakninputblock
hgs
parents:
diff changeset
    82
#include <akncontext.h>
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
#include <gfxtranseffect/gfxtranseffect.h>     // for transition effects
hgs
parents:
diff changeset
    85
#include <akntranseffect.h>                    // for transition effects
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
#include <DocumentHandler.h>
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
#include <RCustomerServiceProfileCache.h>
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
// MMS.Content.Upload
hgs
parents:
diff changeset
    94
#include <muiumsguploadparam.h>
hgs
parents:
diff changeset
    95
#include <CSendingServiceInfo.h>
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
#include <ImumInternalApi.h>                // cimuminternalapi
hgs
parents:
diff changeset
    98
#include <ImumInMailboxServices.h>          // mimuminmailboxservices
hgs
parents:
diff changeset
    99
#include <ImumInSettingsData.h>             // cimuminsettingsdata
hgs
parents:
diff changeset
   100
#include <ImumInSettingsKeys.h>             // timuminsettings
hgs
parents:
diff changeset
   101
#include <UiklafInternalCRKeys.h>
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
#include <MNcnInternalNotification.h>
hgs
parents:
diff changeset
   104
#include <NcnNotificationDefs.h>
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
#include <BTSapDomainPSKeys.h>
hgs
parents:
diff changeset
   107
#include <e32property.h>
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
#include <muiulock.h>
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
#include <messaginginternalpskeys.h>        // kpsuidmuiu, kmuiukeycurrentmsg
hgs
parents:
diff changeset
   112
#include <e32property.h>                    // RProperty
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
#include <CPhCltUssd.h>
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
#include <RPhCltServer.h>
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
#include <hlplch.h>             // For HlpLauncher
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
// For Muiu split
hgs
parents:
diff changeset
   121
#include <muiumsvuiserviceutilitiesinternal.h>
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
#include <ImumInternalApi.h>                // cimuminternalapi
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   126
#include <driveinfo.h>
hgs
parents:
diff changeset
   127
#endif // RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
#include <mce.rsg>
hgs
parents:
diff changeset
   130
#include "MceCommands.hrh"
hgs
parents:
diff changeset
   131
#include "mceui.h"
hgs
parents:
diff changeset
   132
#include "MceSessionHolder.h"
hgs
parents:
diff changeset
   133
#include "MceMessageListView.h"
hgs
parents:
diff changeset
   134
//#include "MceMessageListbox.h"
hgs
parents:
diff changeset
   135
#include "MceMainViewListView.h"
hgs
parents:
diff changeset
   136
#include <mcesettingsdialog.h>
hgs
parents:
diff changeset
   137
#include <mcesettingsarrays.h>
hgs
parents:
diff changeset
   138
#include "MceMessageListContainerBase.h"
hgs
parents:
diff changeset
   139
//#include "MceMessageListContainer.h"
hgs
parents:
diff changeset
   140
#include "MceMainViewListContainer.h"
hgs
parents:
diff changeset
   141
#include "MceBitmapResolver.h"
hgs
parents:
diff changeset
   142
#include "MceConnectMailboxTimer.h"
hgs
parents:
diff changeset
   143
#include "MceSendOperation.h"
hgs
parents:
diff changeset
   144
#include "McePanic.h"
hgs
parents:
diff changeset
   145
#include "MceLogEngine.h"
hgs
parents:
diff changeset
   146
#include "MceDeliveryReportView.h"
hgs
parents:
diff changeset
   147
//#include "MceMessageListItemArray.h"
hgs
parents:
diff changeset
   148
#include "MceMainViewListItemArray.h"
hgs
parents:
diff changeset
   149
#include "MceIdleMtmLoader.h"
hgs
parents:
diff changeset
   150
#include "MceNaviPaneFolderIndicator.h"
hgs
parents:
diff changeset
   151
//#include "MceEmailEditorResetTimer.h"
hgs
parents:
diff changeset
   152
#include "MceCancelSendingOperation.h"
hgs
parents:
diff changeset
   153
#include "MceChangeFlagOperation.h"     // cmceremovenewflag
hgs
parents:
diff changeset
   154
#include "MceEmailNotifHandler.h"
hgs
parents:
diff changeset
   155
#include "MceAttachmentAddition.h"
hgs
parents:
diff changeset
   156
#include "mceiaupdateutils.h"
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
#include <miutset.h>
hgs
parents:
diff changeset
   160
#include <mtmuids.h>
hgs
parents:
diff changeset
   161
#include <MessagingDomainCRKeys.h>
hgs
parents:
diff changeset
   162
#include <mcesettingsemailsel.h>
hgs
parents:
diff changeset
   163
#include <mtmuids.h>
hgs
parents:
diff changeset
   164
#include <MessagingDomainCRKeys.h>
hgs
parents:
diff changeset
   165
//CR:422-271
hgs
parents:
diff changeset
   166
#include <mmscodecclient.h>
hgs
parents:
diff changeset
   167
#include "mmsclient.h"
hgs
parents:
diff changeset
   168
#include "mmsconst.h"
hgs
parents:
diff changeset
   169
#include "e32cmn.h"
hgs
parents:
diff changeset
   170
// CONSTANTS
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
const TInt KMceArrayGranularity                     = 4;
hgs
parents:
diff changeset
   173
const TUid KMceCBSApplication                       = {0x101F4CD3};
hgs
parents:
diff changeset
   174
const TInt KMceCBSApplicationStartView              = 2;
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
_LIT( KMceDirAndFile,"muiu.mbm" );
hgs
parents:
diff changeset
   177
// CONSTANTS
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
const TInt KMceAnswerToLifeUniverseAndEverything    = 42;
hgs
parents:
diff changeset
   180
const TInt KMceMaxFolderLength                      = 35;
hgs
parents:
diff changeset
   181
const TInt KMceTextLength                           = 120;
hgs
parents:
diff changeset
   182
    // Estimate disk value for move or copy
hgs
parents:
diff changeset
   183
const TInt KMceDiskSpaceForMoveOrCopy = 65536;
hgs
parents:
diff changeset
   184
const TInt KMceMaxDateString(12);  // _mm/dd/yyyy_
hgs
parents:
diff changeset
   185
const TInt KMceOneMMSNotificationFailed                 = 1;
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
_LIT8 ( KMceMMSNotifOne8, "1" ); // 8 bit one
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
#define KMessagingCentreMainViewUid TVwsViewId( \
hgs
parents:
diff changeset
   190
    TUid::Uid( KMceApplicationUidValue ), \
hgs
parents:
diff changeset
   191
    TUid::Uid( KMceMainViewListViewIdValue ) )
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
#ifdef _DEBUG
hgs
parents:
diff changeset
   194
_LIT( KPanicText, "Mce" );
hgs
parents:
diff changeset
   195
const TInt KCRepositorySettingFailure = 1;
hgs
parents:
diff changeset
   196
#endif
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
const TInt KMceProgressReporterThreshold = 10;
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
const TUid KMailTechnologyTypeUid = { 0x10001671 };
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
//cmail update
hgs
parents:
diff changeset
   203
#define KUidMsgTypeFsMtmVal               0x2001F406
hgs
parents:
diff changeset
   204
//CR:422-271
hgs
parents:
diff changeset
   205
_LIT( KMmsMessageDumpDirectory, "C:\\Private\\1000484b\\mmsvar");
hgs
parents:
diff changeset
   206
_LIT( KRootPath, "C:\\" );
hgs
parents:
diff changeset
   207
const TInt KMmsCodecClientChunkSize = 1024;
hgs
parents:
diff changeset
   208
#define KMtmUiFunctionSimDialog  ( KMtmFirstFreeMtmUiFunctionId + 1 )
hgs
parents:
diff changeset
   209
// LOCAL FUNCTION PROTOTYPES
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
//  ==================== LOCAL FUNCTIONS ====================
hgs
parents:
diff changeset
   212
//
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
GLDEF_C void Panic(TMceUiPanic aPanic)
hgs
parents:
diff changeset
   215
    // Panic function
hgs
parents:
diff changeset
   216
    {
hgs
parents:
diff changeset
   217
    User::Panic(_L("Mce"), aPanic);
hgs
parents:
diff changeset
   218
    }
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
CMceUi::CMceUi()
hgs
parents:
diff changeset
   225
    :CAknViewAppUi(),
hgs
parents:
diff changeset
   226
    iMsgTypesWritePopup( KMceArrayGranularity ),
hgs
parents:
diff changeset
   227
    iMsgTypesWriteSubmenu( KMceArrayGranularity ),
hgs
parents:
diff changeset
   228
    iMsgTypesSettings( KMceArrayGranularity ),
hgs
parents:
diff changeset
   229
    iOperations( KMsvSingleOpWatcherArrayGranularity ),
hgs
parents:
diff changeset
   230
    iMceIAUpdate( NULL ),
hgs
parents:
diff changeset
   231
    iMoveOrCopyMailOperation(-1),
hgs
parents:
diff changeset
   232
    iHandleNewMsgToInbox ( EFalse ),
hgs
parents:
diff changeset
   233
    iAnchorId( NULL ),
hgs
parents:
diff changeset
   234
    iEmailClientIntegration(EFalse),
hgs
parents:
diff changeset
   235
    iSelectableEmail(EFalse),
hgs
parents:
diff changeset
   236
    iEmailFramework(EFalse),
hgs
parents:
diff changeset
   237
    iSimDialogOpen(EFalse)
hgs
parents:
diff changeset
   238
    {
hgs
parents:
diff changeset
   239
    iMceUiFlags.SetMceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent );
hgs
parents:
diff changeset
   240
    }
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
CMceUi::~CMceUi()
hgs
parents:
diff changeset
   243
    {
hgs
parents:
diff changeset
   244
    MCELOGGER_ENTERFN("~CMceUi()");
hgs
parents:
diff changeset
   245
    iCoeEnv->RemoveForegroundObserver( *this ); // CR : 401-1806
hgs
parents:
diff changeset
   246
    delete iBitmapResolver;
hgs
parents:
diff changeset
   247
    if(iMtmLoader)
hgs
parents:
diff changeset
   248
        {
hgs
parents:
diff changeset
   249
        iMtmLoader->Cancel();
hgs
parents:
diff changeset
   250
        delete iMtmLoader;
hgs
parents:
diff changeset
   251
        }
hgs
parents:
diff changeset
   252
hgs
parents:
diff changeset
   253
#ifdef _DEBUG
hgs
parents:
diff changeset
   254
    MCELOGGER_WRITE_FORMAT("iOperations.Count = %d", iOperations.Count() );
hgs
parents:
diff changeset
   255
    const TInt count = iOperations.Count();
hgs
parents:
diff changeset
   256
    for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
   257
        {
hgs
parents:
diff changeset
   258
        MCELOGGER_WRITE_FORMAT("loop = %d", loop );
hgs
parents:
diff changeset
   259
        MCELOGGER_WRITE_FORMAT("operation id = %d", iOperations[loop]->Operation().Id() );
hgs
parents:
diff changeset
   260
        }
hgs
parents:
diff changeset
   261
#endif
hgs
parents:
diff changeset
   262
    iOperations.ResetAndDestroy();
hgs
parents:
diff changeset
   263
    delete iMTMFunctionsArray;
hgs
parents:
diff changeset
   264
    delete iUiRegistry;
hgs
parents:
diff changeset
   265
    delete iEntry;
hgs
parents:
diff changeset
   266
    delete iRootEntry;
hgs
parents:
diff changeset
   267
    delete iMtmStore;
hgs
parents:
diff changeset
   268
    delete iConnectMailboxTimer;
hgs
parents:
diff changeset
   269
    if ( iSessionHolder )
hgs
parents:
diff changeset
   270
        {
hgs
parents:
diff changeset
   271
        // must not delete sessionholder, it will kill itself...
hgs
parents:
diff changeset
   272
        iSessionHolder->RemoveClient();
hgs
parents:
diff changeset
   273
        // must not delete iSession, session holder takes care of that
hgs
parents:
diff changeset
   274
        }
hgs
parents:
diff changeset
   275
    delete iMceLogEngine;
hgs
parents:
diff changeset
   276
hgs
parents:
diff changeset
   277
    delete iFolderIndicator;
hgs
parents:
diff changeset
   278
    delete iTabsArray;
hgs
parents:
diff changeset
   279
    delete iMMSNotifications;
hgs
parents:
diff changeset
   280
    delete iDecoratedTabGroup;
hgs
parents:
diff changeset
   281
    delete iMceErrorUi;
hgs
parents:
diff changeset
   282
    delete iLocalScreenClearer;
hgs
parents:
diff changeset
   283
    // iSession and iMceDeliveryView owned by iSessionHolder
hgs
parents:
diff changeset
   284
    // don't delete iMessageTypesDlg, dialog will delete itself.
hgs
parents:
diff changeset
   285
    delete iMailAccountItemArray;
hgs
parents:
diff changeset
   286
    // MMS.Content.Upload
hgs
parents:
diff changeset
   287
    iUploadServices.ResetAndDestroy();
hgs
parents:
diff changeset
   288
    delete iEmailApi;
hgs
parents:
diff changeset
   289
    delete iEmailNotifHandler;
hgs
parents:
diff changeset
   290
    delete iCancelExitFlagOperation;
hgs
parents:
diff changeset
   291
    
hgs
parents:
diff changeset
   292
    if(iMceIAUpdate)
hgs
parents:
diff changeset
   293
	    {
hgs
parents:
diff changeset
   294
	    delete iMceIAUpdate;
hgs
parents:
diff changeset
   295
	    }
hgs
parents:
diff changeset
   296
    
hgs
parents:
diff changeset
   297
    if ( iIdArray )
hgs
parents:
diff changeset
   298
        {
hgs
parents:
diff changeset
   299
        delete iIdArray;
hgs
parents:
diff changeset
   300
        iIdArray = NULL;
hgs
parents:
diff changeset
   301
        }
hgs
parents:
diff changeset
   302
    // close connection monitor
hgs
parents:
diff changeset
   303
    if ( iAlwaysOnline )
hgs
parents:
diff changeset
   304
        {
hgs
parents:
diff changeset
   305
        iConnectionMonitor.Close();
hgs
parents:
diff changeset
   306
        }
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
    // delete KPSUidMuiu property
hgs
parents:
diff changeset
   309
    RProperty::Delete( KPSUidMuiu, KMuiuKeyCurrentMsg );
hgs
parents:
diff changeset
   310
    RProperty::Delete( KPSUidMuiu, KMuiuKeyNextMsg );
hgs
parents:
diff changeset
   311
    if ( iFeatureMgrEnabled ) // CR : 401-1806
hgs
parents:
diff changeset
   312
        {
hgs
parents:
diff changeset
   313
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   314
		    iFeatureMgrEnabled = EFalse ; // CR : 401-1806
hgs
parents:
diff changeset
   315
		    }
hgs
parents:
diff changeset
   316
	if(iEncodeBuffer)
hgs
parents:
diff changeset
   317
	{
hgs
parents:
diff changeset
   318
		delete iEncodeBuffer;
hgs
parents:
diff changeset
   319
	}
hgs
parents:
diff changeset
   320
	iFs.Close();
hgs
parents:
diff changeset
   321
		
hgs
parents:
diff changeset
   322
    MCELOGGER_LEAVEFN("~CMceUi()");
hgs
parents:
diff changeset
   323
    MCELOGGER_DELETE;
hgs
parents:
diff changeset
   324
    }
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
void CMceUi::ConstructL()
hgs
parents:
diff changeset
   327
    {
hgs
parents:
diff changeset
   328
    MCELOGGER_CREATE
hgs
parents:
diff changeset
   329
    MCELOGGER_ENTERFN("ConstructL()");
hgs
parents:
diff changeset
   330
    MCELOGGER_WRITE_TIMESTAMP("Time: ");
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
    if ( AknLayoutUtils::MSKEnabled() )
hgs
parents:
diff changeset
   333
        {
hgs
parents:
diff changeset
   334
        BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
hgs
parents:
diff changeset
   335
        }
hgs
parents:
diff changeset
   336
    else
hgs
parents:
diff changeset
   337
        {
hgs
parents:
diff changeset
   338
        BaseConstructL( EAknEnableSkin | EAknSingleClickCompatible );
hgs
parents:
diff changeset
   339
        }
hgs
parents:
diff changeset
   340
hgs
parents:
diff changeset
   341
    // SIM access profiles
hgs
parents:
diff changeset
   342
    CheckSIMAccessProfileL();
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
    // security data caging
hgs
parents:
diff changeset
   345
    TParse fp;
hgs
parents:
diff changeset
   346
    fp.Set( KMceDirAndFile, &KDC_APP_BITMAP_DIR , NULL );
hgs
parents:
diff changeset
   347
    iFilename = fp.FullName();
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   350
    iFeatureMgrEnabled = ETrue ; // CR : 401-1806
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
    //check if 'Memory in use' -option is enabled in mce settings
hgs
parents:
diff changeset
   353
    iMemoryInUse = MceUtils::MemoryInUseOptionL();
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
    iAlwaysOnline = AlwaysOnlineL();
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
    iCancelExitFlagOperation = CIdle::NewL( CActive::EPriorityIdle );
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
    // Are CSP bits supported
hgs
parents:
diff changeset
   360
    iCsp = CspBitsL();
hgs
parents:
diff changeset
   361
    iSessionHolder = CMceSessionHolder::NewL( *this );
hgs
parents:
diff changeset
   362
    iSession = iSessionHolder->Session();
hgs
parents:
diff changeset
   363
hgs
parents:
diff changeset
   364
    RFs& fs=iEikonEnv->FsSession();
hgs
parents:
diff changeset
   365
    TBool storeChanged = EFalse;
hgs
parents:
diff changeset
   366
    TBool storeOnPhoneMemory = ETrue;
hgs
parents:
diff changeset
   367
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   368
    TInt phoneDrive;
hgs
parents:
diff changeset
   369
    // At this point, try avoid using any predefined numbers E.G. EDriveC
hgs
parents:
diff changeset
   370
    // in order to increase the safety and code flexibility
hgs
parents:
diff changeset
   371
    User::LeaveIfError( DriveInfo::GetDefaultDrive( DriveInfo:: EDefaultPhoneMemory, phoneDrive ) );
hgs
parents:
diff changeset
   372
    TInt currentDrive = TInt( iSession->CurrentDriveL() );
hgs
parents:
diff changeset
   373
    if ( currentDrive != phoneDrive )
hgs
parents:
diff changeset
   374
#else
hgs
parents:
diff changeset
   375
    if ( TInt(iSession->CurrentDriveL()) == EDriveE )
hgs
parents:
diff changeset
   376
#endif //RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   377
        {
hgs
parents:
diff changeset
   378
        storeOnPhoneMemory = EFalse;
hgs
parents:
diff changeset
   379
        TBool storeMounted = EFalse;
hgs
parents:
diff changeset
   380
        TRAPD( error, storeMounted = (*iSession).MessageStoreDrivePresentL( ) );
hgs
parents:
diff changeset
   381
        TBool driveContainsStore = EFalse;
hgs
parents:
diff changeset
   382
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   383
        TRAPD( error2, driveContainsStore = iSession->DriveContainsStoreL( currentDrive ) );        
hgs
parents:
diff changeset
   384
#else
hgs
parents:
diff changeset
   385
        TRAPD( error2, driveContainsStore = iSession->DriveContainsStoreL( EDriveE ) );
hgs
parents:
diff changeset
   386
#endif // RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   387
        if ( error || !storeMounted || error2 || !driveContainsStore )
hgs
parents:
diff changeset
   388
            {
hgs
parents:
diff changeset
   389
            //change the message store to phone
hgs
parents:
diff changeset
   390
            storeChanged = ETrue;
hgs
parents:
diff changeset
   391
hgs
parents:
diff changeset
   392
            //Change message store to phones internal memory(EDriveC)
hgs
parents:
diff changeset
   393
            MsvUiServiceUtilitiesInternal::ChangeMessageStoreToPhoneL( *iSession );
hgs
parents:
diff changeset
   394
            iMceUiFlags.ClearMceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent );
hgs
parents:
diff changeset
   395
            }
hgs
parents:
diff changeset
   396
        }
hgs
parents:
diff changeset
   397
hgs
parents:
diff changeset
   398
    iMTMFunctionsArray=new (ELeave) CMsgFuncArray( KMceArrayGranularity );
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
    iBitmapResolver = CMceBitmapResolver::NewL( iSession, *this, ETrue );
hgs
parents:
diff changeset
   401
hgs
parents:
diff changeset
   402
    CMceMainViewListView* mainView = CMceMainViewListView::NewL(
hgs
parents:
diff changeset
   403
        iSession,
hgs
parents:
diff changeset
   404
        *iSessionHolder,
hgs
parents:
diff changeset
   405
        *iBitmapResolver );
hgs
parents:
diff changeset
   406
    CleanupStack::PushL( mainView );
hgs
parents:
diff changeset
   407
    AddViewL(mainView);     // transfer ownership to CAknAppUi
hgs
parents:
diff changeset
   408
    CleanupStack::Pop( mainView );
hgs
parents:
diff changeset
   409
    iMceMainView = mainView;
hgs
parents:
diff changeset
   410
    SetDefaultViewL( *iMceMainView );
hgs
parents:
diff changeset
   411
    SetMceViewActive( EMceMainViewActive );
hgs
parents:
diff changeset
   412
hgs
parents:
diff changeset
   413
    iMceLogEngine = CMceLogEngine::NewL();
hgs
parents:
diff changeset
   414
hgs
parents:
diff changeset
   415
    CEikStatusPane* sp = StatusPane();
hgs
parents:
diff changeset
   416
    iNaviPane = (CAknNavigationControlContainer *)sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi));
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
    // iMessageIterator created when opening the message
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
    // Create IMAP folder indicator
hgs
parents:
diff changeset
   421
hgs
parents:
diff changeset
   422
    CMceNaviPaneFolderIndicator* folder =
hgs
parents:
diff changeset
   423
        CMceNaviPaneFolderIndicator::NewL( storeOnPhoneMemory, 0 );
hgs
parents:
diff changeset
   424
hgs
parents:
diff changeset
   425
    CAknNavigationDecorator* tmp = CAknNavigationDecorator::NewL( 
hgs
parents:
diff changeset
   426
        iNaviPane, folder, CAknNavigationDecorator::ENotSpecified );
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
    CleanupStack::PushL( tmp );
hgs
parents:
diff changeset
   429
    tmp->SetContainerWindowL( *iNaviPane );
hgs
parents:
diff changeset
   430
    CleanupStack::Pop( tmp ); 
hgs
parents:
diff changeset
   431
    tmp->MakeScrollButtonVisible( EFalse );
hgs
parents:
diff changeset
   432
    iFolderIndicator = tmp;
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
    iMailAccountItemArray = new(ELeave) CMceMailAccountItemArray(
hgs
parents:
diff changeset
   435
        KMceArrayGranularity );
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
    iMceIAUpdate = NULL;
hgs
parents:
diff changeset
   438
    iIadUpdateVal  = EFalse;
hgs
parents:
diff changeset
   439
    if(FeatureManager::FeatureSupported( KFeatureIdIAUpdate ))
hgs
parents:
diff changeset
   440
        {
hgs
parents:
diff changeset
   441
        iIadUpdateVal = ETrue;
hgs
parents:
diff changeset
   442
        }
hgs
parents:
diff changeset
   443
        
hgs
parents:
diff changeset
   444
    if ( iAlwaysOnline )
hgs
parents:
diff changeset
   445
        {
hgs
parents:
diff changeset
   446
        iConnectionMonitor.ConnectL();
hgs
parents:
diff changeset
   447
        iConnectionMonitor.NotifyEventL( *this );
hgs
parents:
diff changeset
   448
        }
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
    iMceUiFlags.SetMceFlag( EMceUiFlagsFinishedConstruction );
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
    if ( storeChanged )
hgs
parents:
diff changeset
   453
        {
hgs
parents:
diff changeset
   454
        // message store switching ate EMsvServerReady so do it once again,
hgs
parents:
diff changeset
   455
        // when all has been constructed
hgs
parents:
diff changeset
   456
        storeChanged = EFalse;
hgs
parents:
diff changeset
   457
        HandleSessionEventL( MMsvSessionObserver::EMsvServerReady, NULL, NULL, NULL );
hgs
parents:
diff changeset
   458
        }
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
    // Contents of uploadservices
hgs
parents:
diff changeset
   461
    if ( FeatureManager::FeatureSupported(KFeatureIdSenduiMmsUpload) )
hgs
parents:
diff changeset
   462
        {
hgs
parents:
diff changeset
   463
        CSendUi* sendui = CSendUi::NewLC( );
hgs
parents:
diff changeset
   464
        sendui->AvailableServicesL( iUploadServices, KMmsDirectUpload );
hgs
parents:
diff changeset
   465
        sendui->AvailableServicesL( iUploadServices, KMmsIndirectUpload );
hgs
parents:
diff changeset
   466
        CleanupStack::PopAndDestroy( sendui );
hgs
parents:
diff changeset
   467
        }
hgs
parents:
diff changeset
   468
    
hgs
parents:
diff changeset
   469
    iAudioMsgEnabled = EFalse ; // CR : 401-1806
hgs
parents:
diff changeset
   470
    iPostcardEnabled = EFalse ; // CR : 401-1806
hgs
parents:
diff changeset
   471
    if ( FeatureManager::FeatureSupported( KFeatureIdEmailMceIntegration ) )
hgs
parents:
diff changeset
   472
        {
hgs
parents:
diff changeset
   473
        iEmailClientIntegration = ETrue;
hgs
parents:
diff changeset
   474
        }
hgs
parents:
diff changeset
   475
    if ( FeatureManager::FeatureSupported( KFeatureIdSelectableEmail ) )
hgs
parents:
diff changeset
   476
        {
hgs
parents:
diff changeset
   477
        iSelectableEmail = ETrue;
hgs
parents:
diff changeset
   478
        }
hgs
parents:
diff changeset
   479
    if ( FeatureManager::FeatureSupported( KFeatureIdFfEmailFramework ) )
hgs
parents:
diff changeset
   480
        {
hgs
parents:
diff changeset
   481
        iEmailFramework = ETrue;
hgs
parents:
diff changeset
   482
        }
hgs
parents:
diff changeset
   483
    iMsgDeletedStatus = EFalse;
hgs
parents:
diff changeset
   484
    iServerStarted = EFalse ;
hgs
parents:
diff changeset
   485
    iEmailNotifHandler = NULL;
hgs
parents:
diff changeset
   486
#ifndef __WINSCW__ 
hgs
parents:
diff changeset
   487
    // Handling of NCN reset
hgs
parents:
diff changeset
   488
    TRAPD( err, iEmailNotifHandler = CMceEmailNotifHandler::NewL() );
hgs
parents:
diff changeset
   489
    MCELOGGER_WRITE_FORMAT("ConstructL iEmailNotifHandler err %d", err);
hgs
parents:
diff changeset
   490
    if ( err )
hgs
parents:
diff changeset
   491
        {
hgs
parents:
diff changeset
   492
        iEmailNotifHandler = NULL;
hgs
parents:
diff changeset
   493
        }
hgs
parents:
diff changeset
   494
#endif
hgs
parents:
diff changeset
   495
    ZoomLevelChangedL( ReadZoomLevelL() );
hgs
parents:
diff changeset
   496
hgs
parents:
diff changeset
   497
    iEmailApi = CreateEmailApiL( iSession );
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
    SetDiskSpaceForMoveOrCopyL();
hgs
parents:
diff changeset
   500
    //CR:422-271
hgs
parents:
diff changeset
   501
	//initializing the encodebuffer for MMS templates   
hgs
parents:
diff changeset
   502
    iEncodeBuffer = CBufFlat::NewL( 1 );//To remove hardcoding
hgs
parents:
diff changeset
   503
    User::LeaveIfError( iFs.Connect() );
hgs
parents:
diff changeset
   504
    iFs.SetSessionPath( KRootPath );
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
    MCELOGGER_LEAVEFN("ConstructL()");
hgs
parents:
diff changeset
   507
    }
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
// ----------------------------------------------------
hgs
parents:
diff changeset
   510
// CMceUi::HandleSessionEventL
hgs
parents:
diff changeset
   511
// ----------------------------------------------------
hgs
parents:
diff changeset
   512
void CMceUi::HandleSessionEventL(
hgs
parents:
diff changeset
   513
    TMsvSessionEvent aEvent,
hgs
parents:
diff changeset
   514
    TAny* aArg1,
hgs
parents:
diff changeset
   515
    TAny* aArg2,
hgs
parents:
diff changeset
   516
    TAny* /*aArg3*/ )
hgs
parents:
diff changeset
   517
    {
hgs
parents:
diff changeset
   518
    MCELOGGER_WRITE_TIMESTAMP("CMceUi::HandleSessionEventL() start");
hgs
parents:
diff changeset
   519
    MCELOGGER_WRITE_FORMAT("aEvent=%d", aEvent);
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
    if ( !iMceUiFlags.MceFlag( EMceUiFlagsFinishedConstruction ) )
hgs
parents:
diff changeset
   522
        {
hgs
parents:
diff changeset
   523
        return;
hgs
parents:
diff changeset
   524
        }
hgs
parents:
diff changeset
   525
hgs
parents:
diff changeset
   526
    TMsvId folderId = KMsvNullIndexEntryId;
hgs
parents:
diff changeset
   527
hgs
parents:
diff changeset
   528
    // ConstructL must have left as we have returned to the active scheduler
hgs
parents:
diff changeset
   529
    // before complete construction
hgs
parents:
diff changeset
   530
    TInt err;
hgs
parents:
diff changeset
   531
    switch (aEvent)
hgs
parents:
diff changeset
   532
        {
hgs
parents:
diff changeset
   533
    case EMsvServerReady:
hgs
parents:
diff changeset
   534
    case EMsvCorruptedIndexRebuilt:
hgs
parents:
diff changeset
   535
        iMceUiFlags.ClearMceFlag( EMceUiFlagsMediaUnavailable );
hgs
parents:
diff changeset
   536
        TRAP(err, HandleServerStartupL());
hgs
parents:
diff changeset
   537
        if (err!=KErrNone)
hgs
parents:
diff changeset
   538
            {
hgs
parents:
diff changeset
   539
            // close...
hgs
parents:
diff changeset
   540
            MCELOGGER_WRITE_FORMAT("HandleServerStartupL: %d", err);
hgs
parents:
diff changeset
   541
            iMceUiFlags.SetMceFlag( EMceUiFlagsWantToExit );
hgs
parents:
diff changeset
   542
            iCoeEnv->HandleError( err );
hgs
parents:
diff changeset
   543
            Exit();
hgs
parents:
diff changeset
   544
            }
hgs
parents:
diff changeset
   545
         // Messaging application is started to background in bootup.
hgs
parents:
diff changeset
   546
         // However messaging main view is not activated in background startup.
hgs
parents:
diff changeset
   547
         // Because of that startup of messaging application after background startup is not as fast as other startups.
hgs
parents:
diff changeset
   548
         // This can be optimized by activating main view same way than when messaging application is hide to background.
hgs
parents:
diff changeset
   549
         if ( !IsForeground() )
hgs
parents:
diff changeset
   550
            {
hgs
parents:
diff changeset
   551
            HideOrExit();
hgs
parents:
diff changeset
   552
            }        
hgs
parents:
diff changeset
   553
        break;
hgs
parents:
diff changeset
   554
    case EMsvMediaChanged:
hgs
parents:
diff changeset
   555
    case EMsvMtmGroupInstalled:
hgs
parents:
diff changeset
   556
    case EMsvMtmGroupDeInstalled:
hgs
parents:
diff changeset
   557
        iMceUiFlags.ClearMceFlag( EMceUiFlagsMediaUnavailable );
hgs
parents:
diff changeset
   558
        HandleMTMChangeL();
hgs
parents:
diff changeset
   559
        break;
hgs
parents:
diff changeset
   560
    case EMsvEntriesCreated:
hgs
parents:
diff changeset
   561
    case EMsvEntriesDeleted:
hgs
parents:
diff changeset
   562
        iMceUiFlags.ClearMceFlag( EMceUiFlagsMediaUnavailable );
hgs
parents:
diff changeset
   563
        folderId = (*(TMsvId*) (aArg2));
hgs
parents:
diff changeset
   564
        if ( folderId == KMsvRootIndexEntryId )
hgs
parents:
diff changeset
   565
            {
hgs
parents:
diff changeset
   566
            if ( IsPresent( KSenduiMtmSyncMLEmailUid ) )
hgs
parents:
diff changeset
   567
                {
hgs
parents:
diff changeset
   568
                // check if syncml item should be added/removed
hgs
parents:
diff changeset
   569
                // in new message dialog
hgs
parents:
diff changeset
   570
                SyncMlNewMessageItemL( (CMsvEntrySelection*) aArg1, aEvent );
hgs
parents:
diff changeset
   571
                }
hgs
parents:
diff changeset
   572
            // something changed in root i.e. mailbox created or deleted...
hgs
parents:
diff changeset
   573
            RemoveTabsAndUpdateArray();
hgs
parents:
diff changeset
   574
            }
hgs
parents:
diff changeset
   575
        // fall through 
hgs
parents:
diff changeset
   576
    case EMsvEntriesChanged:
hgs
parents:
diff changeset
   577
        folderId = (*(TMsvId*) (aArg2));
hgs
parents:
diff changeset
   578
        if ( folderId == KMsvRootIndexEntryId && iMceUiFlags.MceFlag( EMceUiFlagsTabsActive ) )
hgs
parents:
diff changeset
   579
            {
hgs
parents:
diff changeset
   580
            CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1; // do not take ownership
hgs
parents:
diff changeset
   581
            const TInt count = selection->Count();
hgs
parents:
diff changeset
   582
            TInt selectedIndex = KErrNotFound;
hgs
parents:
diff changeset
   583
            for ( TInt loop = 0; loop < count && selectedIndex == KErrNotFound; loop++ )
hgs
parents:
diff changeset
   584
                {
hgs
parents:
diff changeset
   585
                selectedIndex = iTabsArray->Find( selection->At( loop ) );
hgs
parents:
diff changeset
   586
                }
hgs
parents:
diff changeset
   587
hgs
parents:
diff changeset
   588
            if ( selectedIndex != KErrNotFound )
hgs
parents:
diff changeset
   589
                {
hgs
parents:
diff changeset
   590
                CheckRemoteMailboxTabIconsL();
hgs
parents:
diff changeset
   591
                }
hgs
parents:
diff changeset
   592
            }
hgs
parents:
diff changeset
   593
        // list update done by active view so do nothing here
hgs
parents:
diff changeset
   594
        break;
hgs
parents:
diff changeset
   595
    case EMsvServerFailedToStart:
hgs
parents:
diff changeset
   596
    case EMsvServerTerminated:
hgs
parents:
diff changeset
   597
    case EMsvCloseSession:
hgs
parents:
diff changeset
   598
        iMceUiFlags.SetMceFlag( EMceUiFlagsWantToExit );
hgs
parents:
diff changeset
   599
        iAvkonViewAppUi->ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
   600
        break;
hgs
parents:
diff changeset
   601
    case EMsvGeneralError:
hgs
parents:
diff changeset
   602
        {
hgs
parents:
diff changeset
   603
        const TInt leave=*STATIC_CAST(TInt*,aArg1);
hgs
parents:
diff changeset
   604
        if (iMceUiFlags.MceFlag( EMceUiFlagsWantToExit ) && leave==KLeaveExit)
hgs
parents:
diff changeset
   605
            {
hgs
parents:
diff changeset
   606
            User::Leave(leave);
hgs
parents:
diff changeset
   607
            }
hgs
parents:
diff changeset
   608
        break;
hgs
parents:
diff changeset
   609
        }
hgs
parents:
diff changeset
   610
    case EMsvMediaUnavailable:
hgs
parents:
diff changeset
   611
        iMceUiFlags.SetMceFlag( EMceUiFlagsMediaUnavailable );
hgs
parents:
diff changeset
   612
        if ( iMceUiFlags.MceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent ) )
hgs
parents:
diff changeset
   613
            {
hgs
parents:
diff changeset
   614
            MCELOGGER_WRITE("CMceUi::HandleSessionEventL() EMsvMediaUnavailable EXIT");
hgs
parents:
diff changeset
   615
            iMceUiFlags.SetMceFlag( EMceUiFlagsWantToExit );
hgs
parents:
diff changeset
   616
            iAvkonViewAppUi->ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
   617
            }
hgs
parents:
diff changeset
   618
        else
hgs
parents:
diff changeset
   619
            {
hgs
parents:
diff changeset
   620
            MCELOGGER_WRITE("CMceUi::HandleSessionEventL() EMsvMediaUnavailable Clear flag!");
hgs
parents:
diff changeset
   621
            iMceUiFlags.ClearMceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent );
hgs
parents:
diff changeset
   622
            }
hgs
parents:
diff changeset
   623
        break;
hgs
parents:
diff changeset
   624
    case EMsvMediaAvailable:
hgs
parents:
diff changeset
   625
        {
hgs
parents:
diff changeset
   626
        iMceUiFlags.ClearMceFlag( EMceUiFlagsMediaUnavailable );
hgs
parents:
diff changeset
   627
        iMceUiFlags.SetMceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent );
hgs
parents:
diff changeset
   628
        // update folders tab
hgs
parents:
diff changeset
   629
        CMceNaviPaneFolderIndicator* findicator =
hgs
parents:
diff changeset
   630
            static_cast<CMceNaviPaneFolderIndicator*>( iFolderIndicator->DecoratedControl() );
hgs
parents:
diff changeset
   631
        findicator->ChangeRootL( TInt(iSession->CurrentDriveL() == EDriveC) );
hgs
parents:
diff changeset
   632
        }
hgs
parents:
diff changeset
   633
        // fall through 
hgs
parents:
diff changeset
   634
    default:
hgs
parents:
diff changeset
   635
        break;
hgs
parents:
diff changeset
   636
        }
hgs
parents:
diff changeset
   637
    MCELOGGER_WRITE_TIMESTAMP("CMceUi::HandleSessionEventL() end");
hgs
parents:
diff changeset
   638
    }
hgs
parents:
diff changeset
   639
hgs
parents:
diff changeset
   640
// ----------------------------------------------------
hgs
parents:
diff changeset
   641
// CMceUi::HandleServerStartupL
hgs
parents:
diff changeset
   642
// ----------------------------------------------------
hgs
parents:
diff changeset
   643
void CMceUi::HandleServerStartupL()
hgs
parents:
diff changeset
   644
    {
hgs
parents:
diff changeset
   645
    iServerStarted = EFalse ;
hgs
parents:
diff changeset
   646
    LoadContextIconL();
hgs
parents:
diff changeset
   647
hgs
parents:
diff changeset
   648
    if ( iMceUiFlags.MceFlag( EMceUiFlagsServerReady ) )
hgs
parents:
diff changeset
   649
        {
hgs
parents:
diff changeset
   650
        MCELOGGER_LEAVEFN("HandleServerStartupL(), server ready");
hgs
parents:
diff changeset
   651
hgs
parents:
diff changeset
   652
        if ( iMemoryInUse )
hgs
parents:
diff changeset
   653
            {
hgs
parents:
diff changeset
   654
            // when iSession->ChangeDriveL is called, also HandleSessionEvent is called
hgs
parents:
diff changeset
   655
            // using EMsvServerReady
hgs
parents:
diff changeset
   656
hgs
parents:
diff changeset
   657
            if(iMtmLoader)
hgs
parents:
diff changeset
   658
                {
hgs
parents:
diff changeset
   659
                iMtmLoader->Cancel();
hgs
parents:
diff changeset
   660
                delete iMtmLoader;
hgs
parents:
diff changeset
   661
                iMtmLoader = NULL;
hgs
parents:
diff changeset
   662
                }
hgs
parents:
diff changeset
   663
hgs
parents:
diff changeset
   664
            delete iUiRegistry;
hgs
parents:
diff changeset
   665
            iUiRegistry=NULL;
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
            delete iEntry;
hgs
parents:
diff changeset
   668
            iEntry = NULL;
hgs
parents:
diff changeset
   669
            iEntry=iSession->GetEntryL(KMsvRootIndexEntryId);
hgs
parents:
diff changeset
   670
hgs
parents:
diff changeset
   671
            delete iRootEntry;
hgs
parents:
diff changeset
   672
            iRootEntry = NULL;
hgs
parents:
diff changeset
   673
            iRootEntry=CMsvEntry::NewL(
hgs
parents:
diff changeset
   674
                *iSession,
hgs
parents:
diff changeset
   675
            KMsvRootIndexEntryId,
hgs
parents:
diff changeset
   676
            TMsvSelectionOrdering(KMsvNoGrouping, EMsvSortByNone, ETrue));
hgs
parents:
diff changeset
   677
hgs
parents:
diff changeset
   678
            delete iMtmStore;
hgs
parents:
diff changeset
   679
            iMtmStore=NULL;
hgs
parents:
diff changeset
   680
hgs
parents:
diff changeset
   681
            iMtmStore=CMtmStore::NewL(*iSession);
hgs
parents:
diff changeset
   682
            iUiRegistry=CMtmUiDataRegistry::NewL(*iSession);
hgs
parents:
diff changeset
   683
hgs
parents:
diff changeset
   684
            iRootEntry->SetEntryL(KMsvRootIndexEntryIdValue);
hgs
parents:
diff changeset
   685
hgs
parents:
diff changeset
   686
            // reconstruct main view
hgs
parents:
diff changeset
   687
            iMceMainView->ConstructMainViewL();
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
            // reconstruct tabs
hgs
parents:
diff changeset
   690
            TBool tabsActive = iMceUiFlags.MceFlag( EMceUiFlagsTabsActive );
hgs
parents:
diff changeset
   691
            RemoveTabs();
hgs
parents:
diff changeset
   692
            delete iDecoratedTabGroup;
hgs
parents:
diff changeset
   693
            iDecoratedTabGroup = NULL;
hgs
parents:
diff changeset
   694
            delete iTabsArray;
hgs
parents:
diff changeset
   695
            iTabsArray = NULL;
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
            if ( MceViewActive( EMceMessageViewActive ) 
hgs
parents:
diff changeset
   698
                && tabsActive 
hgs
parents:
diff changeset
   699
                && ( !iMceListView->IsImapFolderOpenL( ) ) )
hgs
parents:
diff changeset
   700
                {
hgs
parents:
diff changeset
   701
                const TMceListItem& tempItem = iMceMainView
hgs
parents:
diff changeset
   702
                    ->ListContainer()->CurrentItemListItem();
hgs
parents:
diff changeset
   703
                TMsvId service;
hgs
parents:
diff changeset
   704
                TMsvEntry child;
hgs
parents:
diff changeset
   705
                User::LeaveIfError( iSession->GetEntry( tempItem.iMsvId, service, child ) );
hgs
parents:
diff changeset
   706
                ShowTabsL( child.Id() );
hgs
parents:
diff changeset
   707
                }
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
            // update folders tab
hgs
parents:
diff changeset
   710
            CMceNaviPaneFolderIndicator* findicator =
hgs
parents:
diff changeset
   711
                static_cast<CMceNaviPaneFolderIndicator*>( iFolderIndicator->DecoratedControl() );
hgs
parents:
diff changeset
   712
            findicator->ChangeRootL( TInt(iSession->CurrentDriveL()) );
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
            iMceMainView->ListContainer()->DrawNow();
hgs
parents:
diff changeset
   715
            }
hgs
parents:
diff changeset
   716
        iServerStarted = ETrue ;
hgs
parents:
diff changeset
   717
        return;
hgs
parents:
diff changeset
   718
        }
hgs
parents:
diff changeset
   719
hgs
parents:
diff changeset
   720
    iEntry=iSession->GetEntryL(KMsvRootIndexEntryId);
hgs
parents:
diff changeset
   721
    iRootEntry=CMsvEntry::NewL(
hgs
parents:
diff changeset
   722
        *iSession,
hgs
parents:
diff changeset
   723
        KMsvRootIndexEntryId,
hgs
parents:
diff changeset
   724
        TMsvSelectionOrdering(KMsvNoGrouping, EMsvSortByNone, ETrue));
hgs
parents:
diff changeset
   725
    iMtmStore=CMtmStore::NewL(*iSession);
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
    iUiRegistry=CMtmUiDataRegistry::NewL(*iSession);
hgs
parents:
diff changeset
   728
hgs
parents:
diff changeset
   729
   
hgs
parents:
diff changeset
   730
    iMceMainView->HandleMsgServerStartupL();
hgs
parents:
diff changeset
   731
    
hgs
parents:
diff changeset
   732
    CMceDeliveryReportView* view3 = CMceDeliveryReportView::NewL( *iSessionHolder );
hgs
parents:
diff changeset
   733
    CleanupStack::PushL( view3 );
hgs
parents:
diff changeset
   734
    AddViewL( view3 );      // transfer ownership to CAknAppUi
hgs
parents:
diff changeset
   735
    CleanupStack::Pop( view3 );
hgs
parents:
diff changeset
   736
hgs
parents:
diff changeset
   737
    iMceDeliveryView = view3;
hgs
parents:
diff changeset
   738
hgs
parents:
diff changeset
   739
     
hgs
parents:
diff changeset
   740
    CMceMessageListView* mceListView = CMceMessageListView::NewL(
hgs
parents:
diff changeset
   741
        iSession,
hgs
parents:
diff changeset
   742
        KMsvLocalServiceIndexEntryId,
hgs
parents:
diff changeset
   743
        *iSessionHolder,
hgs
parents:
diff changeset
   744
        *iBitmapResolver,
hgs
parents:
diff changeset
   745
        *iMceMainView );
hgs
parents:
diff changeset
   746
    CleanupStack::PushL( mceListView );
hgs
parents:
diff changeset
   747
    AddViewL( mceListView );      // transfer ownership to CAknAppUi
hgs
parents:
diff changeset
   748
    CleanupStack::Pop( mceListView );
hgs
parents:
diff changeset
   749
    iMceListView = mceListView;
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
hgs
parents:
diff changeset
   754
    
hgs
parents:
diff changeset
   755
    iAudioMsgEnabled = FeatureManager::FeatureSupported( KFeatureIdAudioMessaging ); // CR : 401-1806
hgs
parents:
diff changeset
   756
    iPostcardEnabled = FeatureManager::FeatureSupported( KFeatureIdMmsPostcard ) ; // CR : 401-1806
hgs
parents:
diff changeset
   757
hgs
parents:
diff changeset
   758
    HandleMTMChangeL();
hgs
parents:
diff changeset
   759
hgs
parents:
diff changeset
   760
/*    CMceMessageListView* mceListView = CMceMessageListView::NewL(
hgs
parents:
diff changeset
   761
        iSession,
hgs
parents:
diff changeset
   762
        KMsvLocalServiceIndexEntryId,
hgs
parents:
diff changeset
   763
        *iSessionHolder,
hgs
parents:
diff changeset
   764
        *iBitmapResolver,
hgs
parents:
diff changeset
   765
        *iMceMainView );
hgs
parents:
diff changeset
   766
    CleanupStack::PushL( mceListView );
hgs
parents:
diff changeset
   767
    AddViewL(mceListView);      // transfer ownership to CAknAppUi
hgs
parents:
diff changeset
   768
    CleanupStack::Pop(); // mceListView
hgs
parents:
diff changeset
   769
    iMceListView = mceListView;*/
hgs
parents:
diff changeset
   770
    iMceListView->HandleMsgServerStartupL();
hgs
parents:
diff changeset
   771
hgs
parents:
diff changeset
   772
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
    iMceMainView->ListContainer()->ListItems()->SetAlwaysOnline( iAlwaysOnline );
hgs
parents:
diff changeset
   775
hgs
parents:
diff changeset
   776
    if ( iAlwaysOnline )
hgs
parents:
diff changeset
   777
        {
hgs
parents:
diff changeset
   778
        TRequestStatus status;
hgs
parents:
diff changeset
   779
        TInt registrationStatus( 0 );
hgs
parents:
diff changeset
   780
hgs
parents:
diff changeset
   781
        //check network status
hgs
parents:
diff changeset
   782
        iConnectionMonitor.GetIntAttribute(
hgs
parents:
diff changeset
   783
            EBearerIdGSM, 0, KNetworkRegistration,
hgs
parents:
diff changeset
   784
            registrationStatus, status );
hgs
parents:
diff changeset
   785
hgs
parents:
diff changeset
   786
        User::WaitForRequest( status );
hgs
parents:
diff changeset
   787
hgs
parents:
diff changeset
   788
        if ( status.Int() == KErrNone )
hgs
parents:
diff changeset
   789
            {
hgs
parents:
diff changeset
   790
            iMceMainView->ListContainer()->ListItems()->SetRoaming( 
hgs
parents:
diff changeset
   791
                registrationStatus == ENetworkRegistrationRoaming );
hgs
parents:
diff changeset
   792
            }
hgs
parents:
diff changeset
   793
        }
hgs
parents:
diff changeset
   794
hgs
parents:
diff changeset
   795
    iMceUiFlags.ClearMceFlag( EMceUiFlagsWantToExit );
hgs
parents:
diff changeset
   796
    iMceUiFlags.SetMceFlag( EMceUiFlagsServerReady );
hgs
parents:
diff changeset
   797
hgs
parents:
diff changeset
   798
    ToPhoneMemoryQueryL( iMceUiFlags.MceFlag( EMceUiFlagsMainViewActivated ) );
hgs
parents:
diff changeset
   799
hgs
parents:
diff changeset
   800
    iCoeEnv->AddForegroundObserverL( *this ); // CR : 401-1806
hgs
parents:
diff changeset
   801
    //populate MMS templates in inbox which are preloaded KMmsMessageDumpDirectory.
hgs
parents:
diff changeset
   802
    //CR:422-271
hgs
parents:
diff changeset
   803
    PopulateMMSTemplates();
hgs
parents:
diff changeset
   804
    
hgs
parents:
diff changeset
   805
    iServerStarted = ETrue ;
hgs
parents:
diff changeset
   806
    MCELOGGER_LEAVEFN("HandleServerStartupL()");
hgs
parents:
diff changeset
   807
    }
hgs
parents:
diff changeset
   808
hgs
parents:
diff changeset
   809
// ----------------------------------------------------
hgs
parents:
diff changeset
   810
// CMceUi::Session
hgs
parents:
diff changeset
   811
// ----------------------------------------------------
hgs
parents:
diff changeset
   812
CMsvSession& CMceUi::Session()
hgs
parents:
diff changeset
   813
    {
hgs
parents:
diff changeset
   814
    return *iSession;
hgs
parents:
diff changeset
   815
    }
hgs
parents:
diff changeset
   816
hgs
parents:
diff changeset
   817
// ----------------------------------------------------
hgs
parents:
diff changeset
   818
// CMceUi::HandleCommandL
hgs
parents:
diff changeset
   819
// ----------------------------------------------------
hgs
parents:
diff changeset
   820
void CMceUi::HandleCommandL( TInt aCommand )
hgs
parents:
diff changeset
   821
    {
hgs
parents:
diff changeset
   822
    MCELOGGER_WRITE_FORMAT("HandleCommandL: aCommand: %d", aCommand);
hgs
parents:
diff changeset
   823
hgs
parents:
diff changeset
   824
    if ( iMceUiFlags.MceFlag( EMceUiFlagsMediaUnavailable ) 
hgs
parents:
diff changeset
   825
        && aCommand != EEikCmdExit 
hgs
parents:
diff changeset
   826
        && aCommand != EMceCmdExit 
hgs
parents:
diff changeset
   827
        && aCommand != EAknSoftkeyBack)
hgs
parents:
diff changeset
   828
        {
hgs
parents:
diff changeset
   829
        MCELOGGER_WRITE("HandleCommandL: media unavailable, leave");
hgs
parents:
diff changeset
   830
        User::Leave( KMsvIndexBackup );
hgs
parents:
diff changeset
   831
        }
hgs
parents:
diff changeset
   832
hgs
parents:
diff changeset
   833
    switch (aCommand)
hgs
parents:
diff changeset
   834
        {
hgs
parents:
diff changeset
   835
        case EEikCmdExit:
hgs
parents:
diff changeset
   836
            iSimDialogOpen = EFalse;
hgs
parents:
diff changeset
   837
            Exit();
hgs
parents:
diff changeset
   838
            break;
hgs
parents:
diff changeset
   839
        case EMceCmdExit:
hgs
parents:
diff changeset
   840
            CloseConnectionsBeforeExitL();
hgs
parents:
diff changeset
   841
            if ( iMceUiFlags.MceFlag( EMceUiFlagsWantToExit ) )
hgs
parents:
diff changeset
   842
                {
hgs
parents:
diff changeset
   843
                HideOrExit();
hgs
parents:
diff changeset
   844
                }
hgs
parents:
diff changeset
   845
            break;
hgs
parents:
diff changeset
   846
        case EAknCmdHideInBackground:
hgs
parents:
diff changeset
   847
            HideOrExit();
hgs
parents:
diff changeset
   848
            break;
hgs
parents:
diff changeset
   849
        case EMceCmdNewFolder:
hgs
parents:
diff changeset
   850
            CreateNewFolderL( );
hgs
parents:
diff changeset
   851
            break;
hgs
parents:
diff changeset
   852
        case EMceCmdRenameFolder:
hgs
parents:
diff changeset
   853
            RenameFolderL();
hgs
parents:
diff changeset
   854
            break;
hgs
parents:
diff changeset
   855
        case EMceCmdSettings:
hgs
parents:
diff changeset
   856
            SettingsDialogL();
hgs
parents:
diff changeset
   857
            break;
hgs
parents:
diff changeset
   858
        case EMceCmdDelete:
hgs
parents:
diff changeset
   859
            HandleDeleteL();
hgs
parents:
diff changeset
   860
            break;
hgs
parents:
diff changeset
   861
        case EMceCmdUndelete:
hgs
parents:
diff changeset
   862
            HandleUndeleteL();
hgs
parents:
diff changeset
   863
            break;
hgs
parents:
diff changeset
   864
        case EMceCmdCopy:
hgs
parents:
diff changeset
   865
            MoveOrCopyEntriesL( ETrue );
hgs
parents:
diff changeset
   866
            break;
hgs
parents:
diff changeset
   867
        case EMceCmdMove:
hgs
parents:
diff changeset
   868
            MoveOrCopyEntriesL( EFalse );
hgs
parents:
diff changeset
   869
            break;
hgs
parents:
diff changeset
   870
        case EMceCmdFetchNew:
hgs
parents:
diff changeset
   871
            FetchNewL();
hgs
parents:
diff changeset
   872
            break;
hgs
parents:
diff changeset
   873
        case EMceCmdFetchSelected:
hgs
parents:
diff changeset
   874
            FetchSelectedL();
hgs
parents:
diff changeset
   875
            break;
hgs
parents:
diff changeset
   876
        case EMceCmdFetchAll:
hgs
parents:
diff changeset
   877
            FetchAllL();
hgs
parents:
diff changeset
   878
            break;
hgs
parents:
diff changeset
   879
        case EAknSoftkeyBack:
hgs
parents:
diff changeset
   880
            RemoveTabs();
hgs
parents:
diff changeset
   881
            ActivateLocalViewL( KMceMainViewListViewId );
hgs
parents:
diff changeset
   882
            break;
hgs
parents:
diff changeset
   883
        case EMceCmdOutboxStart:
hgs
parents:
diff changeset
   884
            SendNowL();
hgs
parents:
diff changeset
   885
            break;
hgs
parents:
diff changeset
   886
        case EMceCmdOutboxSuspend:
hgs
parents:
diff changeset
   887
            CancelSendingL();
hgs
parents:
diff changeset
   888
            break;
hgs
parents:
diff changeset
   889
        case EMceCmdOutboxMoveToDrafts:
hgs
parents:
diff changeset
   890
            {
hgs
parents:
diff changeset
   891
            if ( iMceListView->SyncMlOutboxInbox( KMsvGlobalOutBoxIndexEntryId ) )
hgs
parents:
diff changeset
   892
                {
hgs
parents:
diff changeset
   893
                SyncMlMoveFromOutboxToDraftsL();
hgs
parents:
diff changeset
   894
                }
hgs
parents:
diff changeset
   895
            else
hgs
parents:
diff changeset
   896
                {
hgs
parents:
diff changeset
   897
                MoveFromOutboxToDraftsL();
hgs
parents:
diff changeset
   898
                }
hgs
parents:
diff changeset
   899
            }
hgs
parents:
diff changeset
   900
            break;
hgs
parents:
diff changeset
   901
        case EMceCmdCBSApplication:
hgs
parents:
diff changeset
   902
            LaunchCBSApplicationL();
hgs
parents:
diff changeset
   903
            break;
hgs
parents:
diff changeset
   904
        case EMceCmdUSSDEditor:
hgs
parents:
diff changeset
   905
            LaunchServiceCommandEditorL();
hgs
parents:
diff changeset
   906
            break;
hgs
parents:
diff changeset
   907
hgs
parents:
diff changeset
   908
        case EAknCmdHelp:
hgs
parents:
diff changeset
   909
            LaunchHelpL();
hgs
parents:
diff changeset
   910
            break;
hgs
parents:
diff changeset
   911
hgs
parents:
diff changeset
   912
        case EAknCmdOpen:
hgs
parents:
diff changeset
   913
        case EMceCmdConnect:
hgs
parents:
diff changeset
   914
        case EMceCmdCloseConnection:
hgs
parents:
diff changeset
   915
        case EAknCmdUnmark:
hgs
parents:
diff changeset
   916
        case EAknCmdMark:
hgs
parents:
diff changeset
   917
        case EAknMarkAll:
hgs
parents:
diff changeset
   918
        case EAknUnmarkAll:
hgs
parents:
diff changeset
   919
            // these should be handled by view
hgs
parents:
diff changeset
   920
            break;
hgs
parents:
diff changeset
   921
hgs
parents:
diff changeset
   922
        case EMceCmdReply:
hgs
parents:
diff changeset
   923
            ReplyL(aCommand);
hgs
parents:
diff changeset
   924
            break;
hgs
parents:
diff changeset
   925
hgs
parents:
diff changeset
   926
        case EMceCmdMarkAsRead:
hgs
parents:
diff changeset
   927
        case EMceCmdMarkAsReadMsg:
hgs
parents:
diff changeset
   928
        case EMceCmdMarkAsReadMsgs:
hgs
parents:
diff changeset
   929
        case EMceCmdMarkAsReadEmails:
hgs
parents:
diff changeset
   930
            MarkAsReadL();
hgs
parents:
diff changeset
   931
            break;
hgs
parents:
diff changeset
   932
hgs
parents:
diff changeset
   933
        case EMceCmdMarkAsUnread:
hgs
parents:
diff changeset
   934
        case EMceCmdMarkAsUnreadMsg:
hgs
parents:
diff changeset
   935
        case EMceCmdMarkAsUnreadMsgs:
hgs
parents:
diff changeset
   936
        case EMceCmdMarkAsUnreadEmails:
hgs
parents:
diff changeset
   937
            MarkAsReadL( EFalse );
hgs
parents:
diff changeset
   938
            break;
hgs
parents:
diff changeset
   939
hgs
parents:
diff changeset
   940
        case EMceCmdMailboxSettings:
hgs
parents:
diff changeset
   941
            OpenMailboxSettingsL();
hgs
parents:
diff changeset
   942
            break;
hgs
parents:
diff changeset
   943
hgs
parents:
diff changeset
   944
        case EMceCmdForward:
hgs
parents:
diff changeset
   945
            ForwardL(aCommand);
hgs
parents:
diff changeset
   946
            break;
hgs
parents:
diff changeset
   947
hgs
parents:
diff changeset
   948
        case EMceCmdZoomValueAutomatic:
hgs
parents:
diff changeset
   949
        case EMceCmdZoomValueSmall:
hgs
parents:
diff changeset
   950
        case EMceCmdZoomValueMedium:
hgs
parents:
diff changeset
   951
        case EMceCmdZoomValueLarge:
hgs
parents:
diff changeset
   952
            HandleZoomLevelChangeL( aCommand );
hgs
parents:
diff changeset
   953
            break;
hgs
parents:
diff changeset
   954
        case EMceCmdLanuchUniEditor:
hgs
parents:
diff changeset
   955
            LaunchUniEditorL();
hgs
parents:
diff changeset
   956
            break;
hgs
parents:
diff changeset
   957
            
hgs
parents:
diff changeset
   958
        case EMceCmdLaunchEmailEditor:
hgs
parents:
diff changeset
   959
            CreateNewMessageL( GetToBeCreatedEmailType () );
hgs
parents:
diff changeset
   960
            break;
hgs
parents:
diff changeset
   961
hgs
parents:
diff changeset
   962
        default:
hgs
parents:
diff changeset
   963
        if ( aCommand >= EMceCmdFirstMTMFunction && aCommand < EMceCmdFirstMTMContextFunction )
hgs
parents:
diff changeset
   964
            {
hgs
parents:
diff changeset
   965
            const TMsgFunctionInfo* info=&iMTMFunctionsArray->At(aCommand-EMceCmdFirstMTMFunction);
hgs
parents:
diff changeset
   966
            HandleMTMFunctionL(*info);
hgs
parents:
diff changeset
   967
            }
hgs
parents:
diff changeset
   968
        else if ( aCommand > EMceCmdCreateNewCommands && aCommand < EMceCmdFirstMTMFunction  )
hgs
parents:
diff changeset
   969
                {
hgs
parents:
diff changeset
   970
                const TInt messageIndex =
hgs
parents:
diff changeset
   971
                    aCommand - EMceCmdCreateNewCommands - 1;
hgs
parents:
diff changeset
   972
                __ASSERT_ALWAYS( messageIndex < iMsgTypesWriteSubmenu.Count(),
hgs
parents:
diff changeset
   973
                    Panic( EMceUiErrCreateNewMessageCommand ) );
hgs
parents:
diff changeset
   974
                CreateNewMessageL( iMsgTypesWriteSubmenu[messageIndex].iUid.iUid );
hgs
parents:
diff changeset
   975
                }
hgs
parents:
diff changeset
   976
        break;
hgs
parents:
diff changeset
   977
        } // switch
hgs
parents:
diff changeset
   978
    MCELOGGER_LEAVEFN("HandleCommandL()");
hgs
parents:
diff changeset
   979
    }
hgs
parents:
diff changeset
   980
hgs
parents:
diff changeset
   981
// ----------------------------------------------------
hgs
parents:
diff changeset
   982
// CMceUi::DynInitMenuPaneL
hgs
parents:
diff changeset
   983
// ----------------------------------------------------
hgs
parents:
diff changeset
   984
void CMceUi::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   985
    {
hgs
parents:
diff changeset
   986
    ForceMtmLoaderFinish();
hgs
parents:
diff changeset
   987
    TBool cbs = EFalse;
hgs
parents:
diff changeset
   988
    if ( FeatureManager::FeatureSupported( KFeatureIdCellBroadcast ) )
hgs
parents:
diff changeset
   989
        {
hgs
parents:
diff changeset
   990
        cbs = ETrue;
hgs
parents:
diff changeset
   991
        if ( iCsp )
hgs
parents:
diff changeset
   992
            {
hgs
parents:
diff changeset
   993
            cbs = CheckCspBitL();
hgs
parents:
diff changeset
   994
            }
hgs
parents:
diff changeset
   995
        }
hgs
parents:
diff changeset
   996
    switch ( aResourceId )
hgs
parents:
diff changeset
   997
        {
hgs
parents:
diff changeset
   998
        case R_MCE_MAIN_VIEW_MENU:
hgs
parents:
diff changeset
   999
            {
hgs
parents:
diff changeset
  1000
            // Run time Cell Broadcast variant.
hgs
parents:
diff changeset
  1001
            // Enable/disable CBS
hgs
parents:
diff changeset
  1002
            aMenuPane->SetItemDimmed( EMceCmdCBSApplication, !cbs );
hgs
parents:
diff changeset
  1003
            // Run time USSD variant.
hgs
parents:
diff changeset
  1004
            aMenuPane->SetItemDimmed( EMceCmdUSSDEditor,
hgs
parents:
diff changeset
  1005
                !FeatureManager::FeatureSupported( KFeatureIdUSSD ));
hgs
parents:
diff changeset
  1006
hgs
parents:
diff changeset
  1007
            aMenuPane->SetItemDimmed( EAknCmdHelp,
hgs
parents:
diff changeset
  1008
                !FeatureManager::FeatureSupported( KFeatureIdHelp ) );
hgs
parents:
diff changeset
  1009
hgs
parents:
diff changeset
  1010
            if ( iMsgTypesWriteSubmenu.Count() == 0 )
hgs
parents:
diff changeset
  1011
                {
hgs
parents:
diff changeset
  1012
                aMenuPane->SetItemDimmed( EMceCmdNewMessage, ETrue );
hgs
parents:
diff changeset
  1013
                }
hgs
parents:
diff changeset
  1014
            if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  1015
                {
hgs
parents:
diff changeset
  1016
                AddMTMFunctionsL(*aMenuPane, EMceCmdCloseConnection);
hgs
parents:
diff changeset
  1017
hgs
parents:
diff changeset
  1018
                const CMceMainViewListContainer* listContainer =
hgs
parents:
diff changeset
  1019
                    iMceMainView->ListContainer();
hgs
parents:
diff changeset
  1020
                const TMceListItem listItem =
hgs
parents:
diff changeset
  1021
                    listContainer->CurrentItemListItem();
hgs
parents:
diff changeset
  1022
                if ( listItem.iExtraItem )
hgs
parents:
diff changeset
  1023
                    {
hgs
parents:
diff changeset
  1024
                    aMenuPane->SetItemDimmed( EMceCmdConnect, ETrue );
hgs
parents:
diff changeset
  1025
                    }
hgs
parents:
diff changeset
  1026
                else
hgs
parents:
diff changeset
  1027
                    {
hgs
parents:
diff changeset
  1028
                    const TUid  connectCapability =
hgs
parents:
diff changeset
  1029
                        { KUidMsvMtmUiQueryConnectionOrientedServices };
hgs
parents:
diff changeset
  1030
                    TInt rid;
hgs
parents:
diff changeset
  1031
hgs
parents:
diff changeset
  1032
                    iEntry->SetEntryL( listItem.iMsvId );
hgs
parents:
diff changeset
  1033
                    TUid uid = iEntry->Entry().iMtm;
hgs
parents:
diff changeset
  1034
                    CBaseMtmUiData* uiData = NULL;
hgs
parents:
diff changeset
  1035
                    if ( uid != KUidMsvLocalServiceMtm )
hgs
parents:
diff changeset
  1036
                        {
hgs
parents:
diff changeset
  1037
                        uiData=GetMtmUiDataL( uid );
hgs
parents:
diff changeset
  1038
                        }
hgs
parents:
diff changeset
  1039
                    if ( uiData && ( uid != KSenduiMtmSyncMLEmailUid ) 
hgs
parents:
diff changeset
  1040
                        && uiData->QueryCapability( connectCapability, rid )
hgs
parents:
diff changeset
  1041
                        == KErrNone )
hgs
parents:
diff changeset
  1042
                        {
hgs
parents:
diff changeset
  1043
                        // need to check if connected or not
hgs
parents:
diff changeset
  1044
                        if ( iEntry->Entry().Connected() )
hgs
parents:
diff changeset
  1045
                            {
hgs
parents:
diff changeset
  1046
                            aMenuPane->SetItemDimmed( EMceCmdConnect, ETrue );
hgs
parents:
diff changeset
  1047
                            }
hgs
parents:
diff changeset
  1048
                        }
hgs
parents:
diff changeset
  1049
                    else
hgs
parents:
diff changeset
  1050
                        {
hgs
parents:
diff changeset
  1051
                        aMenuPane->SetItemDimmed( EMceCmdConnect, ETrue );
hgs
parents:
diff changeset
  1052
                        }
hgs
parents:
diff changeset
  1053
                    }
hgs
parents:
diff changeset
  1054
                // if we have at least one connection open then do not delete EMceCmdCloseConnection
hgs
parents:
diff changeset
  1055
                CMsvEntrySelection* connectedAccounts = ConnectedServicesLC();
hgs
parents:
diff changeset
  1056
                if ( connectedAccounts->Count() == 0)
hgs
parents:
diff changeset
  1057
                    {
hgs
parents:
diff changeset
  1058
                    aMenuPane->SetItemDimmed( EMceCmdCloseConnection, ETrue );
hgs
parents:
diff changeset
  1059
                    }
hgs
parents:
diff changeset
  1060
                CleanupStack::PopAndDestroy( connectedAccounts );
hgs
parents:
diff changeset
  1061
hgs
parents:
diff changeset
  1062
                } // if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  1063
            break;
hgs
parents:
diff changeset
  1064
            }
hgs
parents:
diff changeset
  1065
        case R_MCE_NEW_MESSAGE_MENU:
hgs
parents:
diff changeset
  1066
            {
hgs
parents:
diff changeset
  1067
            CEikMenuPaneItem::SData item;
hgs
parents:
diff changeset
  1068
            item.iCommandId = EMceCmdCreateNewCommands;
hgs
parents:
diff changeset
  1069
            item.iFlags = 0;
hgs
parents:
diff changeset
  1070
            item.iCascadeId = 0;
hgs
parents:
diff changeset
  1071
            const TInt count = iMsgTypesWriteSubmenu.Count();
hgs
parents:
diff changeset
  1072
            for(TInt loop = 0; loop < count; loop++)
hgs
parents:
diff changeset
  1073
                {
hgs
parents:
diff changeset
  1074
                item.iText = iMsgTypesWriteSubmenu[loop].iName;
hgs
parents:
diff changeset
  1075
                item.iCommandId++;
hgs
parents:
diff changeset
  1076
                aMenuPane->AddMenuItemL(item);
hgs
parents:
diff changeset
  1077
                }
hgs
parents:
diff changeset
  1078
            break;
hgs
parents:
diff changeset
  1079
            }
hgs
parents:
diff changeset
  1080
       case R_MCE_FOLDER_MENU:
hgs
parents:
diff changeset
  1081
            {
hgs
parents:
diff changeset
  1082
            aMenuPane->SetItemDimmed( EAknCmdHelp,
hgs
parents:
diff changeset
  1083
                !FeatureManager::FeatureSupported( KFeatureIdHelp ) );
hgs
parents:
diff changeset
  1084
hgs
parents:
diff changeset
  1085
            AddMTMFunctionsL(*aMenuPane, EAknCmdOpen);
hgs
parents:
diff changeset
  1086
            }
hgs
parents:
diff changeset
  1087
            break;
hgs
parents:
diff changeset
  1088
       case R_MCE_LOCAL_ZOOM_VALUE:
hgs
parents:
diff changeset
  1089
            {
hgs
parents:
diff changeset
  1090
            HandleZoomSubMenu( aMenuPane );
hgs
parents:
diff changeset
  1091
            }
hgs
parents:
diff changeset
  1092
            break;
hgs
parents:
diff changeset
  1093
        default:
hgs
parents:
diff changeset
  1094
            break;
hgs
parents:
diff changeset
  1095
        }// end switch
hgs
parents:
diff changeset
  1096
    }
hgs
parents:
diff changeset
  1097
hgs
parents:
diff changeset
  1098
// ----------------------------------------------------
hgs
parents:
diff changeset
  1099
// CMceUi::SendViaL
hgs
parents:
diff changeset
  1100
// ----------------------------------------------------
hgs
parents:
diff changeset
  1101
void CMceUi::SendViaL( TMsvId aId, TUid aMtm )
hgs
parents:
diff changeset
  1102
    {
hgs
parents:
diff changeset
  1103
    __ASSERT_DEBUG( aMtm == KSenduiMtmIrUid || aMtm == KSenduiMtmBtUid,
hgs
parents:
diff changeset
  1104
    Panic(EMceUiErrCanSendViaOnlyBtOrIr) );
hgs
parents:
diff changeset
  1105
hgs
parents:
diff changeset
  1106
    LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  1107
hgs
parents:
diff changeset
  1108
    // Get the file name
hgs
parents:
diff changeset
  1109
    TFileName fileName;
hgs
parents:
diff changeset
  1110
    TInt fileSize;
hgs
parents:
diff changeset
  1111
    RFile fileHandle;
hgs
parents:
diff changeset
  1112
    MceUtils::GetIrFilePathL( *iSession, aId, fileName, fileHandle, fileSize );
hgs
parents:
diff changeset
  1113
    CleanupClosePushL( fileHandle );
hgs
parents:
diff changeset
  1114
hgs
parents:
diff changeset
  1115
    // Required capabilities for message types
hgs
parents:
diff changeset
  1116
    TSendingCapabilities capabilities(
hgs
parents:
diff changeset
  1117
        0,
hgs
parents:
diff changeset
  1118
        0,
hgs
parents:
diff changeset
  1119
        TSendingCapabilities::ESupportsAttachments );
hgs
parents:
diff changeset
  1120
hgs
parents:
diff changeset
  1121
    // Create the message
hgs
parents:
diff changeset
  1122
    CMessageData* messageData = CMessageData::NewL();
hgs
parents:
diff changeset
  1123
    CleanupStack::PushL( messageData );
hgs
parents:
diff changeset
  1124
    messageData->AppendAttachmentHandleL( fileHandle );
hgs
parents:
diff changeset
  1125
hgs
parents:
diff changeset
  1126
    // Send the message with SendUI
hgs
parents:
diff changeset
  1127
    CSendUi* sendui = CSendUi::NewLC();
hgs
parents:
diff changeset
  1128
    sendui->CreateAndSendMessageL( aMtm, messageData, KNullUid, ETrue );
hgs
parents:
diff changeset
  1129
hgs
parents:
diff changeset
  1130
    CleanupStack::PopAndDestroy( 3 ); // sendui, messageData, fileHandle 
hgs
parents:
diff changeset
  1131
    }
hgs
parents:
diff changeset
  1132
hgs
parents:
diff changeset
  1133
// ----------------------------------------------------
hgs
parents:
diff changeset
  1134
// CMceUi::HandleKeyEventL
hgs
parents:
diff changeset
  1135
// ----------------------------------------------------
hgs
parents:
diff changeset
  1136
TKeyResponse CMceUi::HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
hgs
parents:
diff changeset
  1137
    {
hgs
parents:
diff changeset
  1138
    if ( iEditorOperation )
hgs
parents:
diff changeset
  1139
        {
hgs
parents:
diff changeset
  1140
        MCELOGGER_WRITE_FORMAT("HandleKeyEventL: iEditorOperation set 0x%x so don't do anything", iEditorOperation );
hgs
parents:
diff changeset
  1141
        return EKeyWasConsumed;
hgs
parents:
diff changeset
  1142
        }
hgs
parents:
diff changeset
  1143
hgs
parents:
diff changeset
  1144
    if ( iMceUiFlags.MceFlag( EMceUiFlagsTabsActive ) && aType == EEventKey )
hgs
parents:
diff changeset
  1145
        {
hgs
parents:
diff changeset
  1146
        CAknTabGroup* tabGroup = NULL;
hgs
parents:
diff changeset
  1147
        if ( iDecoratedTabGroup )
hgs
parents:
diff changeset
  1148
            {
hgs
parents:
diff changeset
  1149
            tabGroup = ( CAknTabGroup* ) iDecoratedTabGroup->DecoratedControl();
hgs
parents:
diff changeset
  1150
            }
hgs
parents:
diff changeset
  1151
hgs
parents:
diff changeset
  1152
        if ( !tabGroup )
hgs
parents:
diff changeset
  1153
            {
hgs
parents:
diff changeset
  1154
            return EKeyWasNotConsumed;
hgs
parents:
diff changeset
  1155
            }
hgs
parents:
diff changeset
  1156
hgs
parents:
diff changeset
  1157
        return tabGroup->OfferKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
  1158
        }
hgs
parents:
diff changeset
  1159
hgs
parents:
diff changeset
  1160
    return EKeyWasNotConsumed;
hgs
parents:
diff changeset
  1161
    }
hgs
parents:
diff changeset
  1162
hgs
parents:
diff changeset
  1163
// ----------------------------------------------------
hgs
parents:
diff changeset
  1164
// CMceUi::LogEngine
hgs
parents:
diff changeset
  1165
// ----------------------------------------------------
hgs
parents:
diff changeset
  1166
CMceLogEngine* CMceUi::LogEngine()
hgs
parents:
diff changeset
  1167
    {
hgs
parents:
diff changeset
  1168
    return iMceLogEngine;
hgs
parents:
diff changeset
  1169
    }
hgs
parents:
diff changeset
  1170
hgs
parents:
diff changeset
  1171
// ----------------------------------------------------
hgs
parents:
diff changeset
  1172
// CMceUi::LaunchHelpL
hgs
parents:
diff changeset
  1173
// ----------------------------------------------------
hgs
parents:
diff changeset
  1174
void CMceUi::LaunchHelpL()
hgs
parents:
diff changeset
  1175
    {
hgs
parents:
diff changeset
  1176
    // activate Help application
hgs
parents:
diff changeset
  1177
    CArrayFix<TCoeHelpContext>* helpContext = AppHelpContextL();
hgs
parents:
diff changeset
  1178
    HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
hgs
parents:
diff changeset
  1179
    }
hgs
parents:
diff changeset
  1180
hgs
parents:
diff changeset
  1181
// ----------------------------------------------------
hgs
parents:
diff changeset
  1182
// CMceUi::HandleOpenNextPreviousL
hgs
parents:
diff changeset
  1183
// ----------------------------------------------------
hgs
parents:
diff changeset
  1184
void CMceUi::HandleOpenNextPreviousL( TBool /*aOpenNext*/ )
hgs
parents:
diff changeset
  1185
    {
hgs
parents:
diff changeset
  1186
    MCELOGGER_ENTERFN("HandleOpenNextPreviousL()");
hgs
parents:
diff changeset
  1187
     
hgs
parents:
diff changeset
  1188
    // Read the next message TMsvId using PS key 
hgs
parents:
diff changeset
  1189
    TInt nextEntryId = 0;
hgs
parents:
diff changeset
  1190
    TInt r = RProperty::Get( KPSUidMuiu, KMuiuKeyNextMsg, nextEntryId );
hgs
parents:
diff changeset
  1191
    if ( r != KErrNone )
hgs
parents:
diff changeset
  1192
        {
hgs
parents:
diff changeset
  1193
        nextEntryId = 0;
hgs
parents:
diff changeset
  1194
        }
hgs
parents:
diff changeset
  1195
    
hgs
parents:
diff changeset
  1196
    if ( nextEntryId > 0 )
hgs
parents:
diff changeset
  1197
        {
hgs
parents:
diff changeset
  1198
        // no need of following check because TMsvID is set properly
hgs
parents:
diff changeset
  1199
        //set from MsgEditorAppUI.
hgs
parents:
diff changeset
  1200
  
hgs
parents:
diff changeset
  1201
    
hgs
parents:
diff changeset
  1202
        TBool local = iMceListView->ListContainer()->FolderEntry().iServiceId == KMsvLocalServiceIndexEntryId;
hgs
parents:
diff changeset
  1203
        if ( local && !iLocalScreenClearer ) 
hgs
parents:
diff changeset
  1204
            {
hgs
parents:
diff changeset
  1205
            iLocalScreenClearer = CAknLocalScreenClearer::NewL( ETrue );
hgs
parents:
diff changeset
  1206
            }
hgs
parents:
diff changeset
  1207
hgs
parents:
diff changeset
  1208
        CMceMessageListContainerBase* container = iMceListView->ListContainer();
hgs
parents:
diff changeset
  1209
        
hgs
parents:
diff changeset
  1210
        TMsvId currentItemId = nextEntryId;
hgs
parents:
diff changeset
  1211
        if ( container )
hgs
parents:
diff changeset
  1212
            {
hgs
parents:
diff changeset
  1213
            container->SetCurrentItemIdL( currentItemId );
hgs
parents:
diff changeset
  1214
            container->DrawNow();
hgs
parents:
diff changeset
  1215
            }
hgs
parents:
diff changeset
  1216
hgs
parents:
diff changeset
  1217
        TMsvEntry currentEntry;
hgs
parents:
diff changeset
  1218
        TMsvId serviceId; // not used here but needed by GetEntry function
hgs
parents:
diff changeset
  1219
        if ( iSession->GetEntry( currentItemId, serviceId, currentEntry ) == KErrNone &&
hgs
parents:
diff changeset
  1220
             currentEntry.iType == KUidMsvMessageEntry )
hgs
parents:
diff changeset
  1221
            {
hgs
parents:
diff changeset
  1222
            TRAPD( err, EditMTMEntryL( currentEntry ) );
hgs
parents:
diff changeset
  1223
            if ( err )
hgs
parents:
diff changeset
  1224
                {
hgs
parents:
diff changeset
  1225
                if ( iLocalScreenClearer )
hgs
parents:
diff changeset
  1226
                    {
hgs
parents:
diff changeset
  1227
                    delete iLocalScreenClearer;
hgs
parents:
diff changeset
  1228
                    iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  1229
                    }
hgs
parents:
diff changeset
  1230
                User::Leave( err );
hgs
parents:
diff changeset
  1231
                }
hgs
parents:
diff changeset
  1232
            }
hgs
parents:
diff changeset
  1233
        } // end  
hgs
parents:
diff changeset
  1234
    MCELOGGER_LEAVEFN("HandleOpenNextPreviousL()");
hgs
parents:
diff changeset
  1235
    }
hgs
parents:
diff changeset
  1236
hgs
parents:
diff changeset
  1237
// ----------------------------------------------------
hgs
parents:
diff changeset
  1238
// CMceUi::LaunchCBSApplicationL
hgs
parents:
diff changeset
  1239
// ----------------------------------------------------
hgs
parents:
diff changeset
  1240
void CMceUi::LaunchCBSApplicationL()
hgs
parents:
diff changeset
  1241
    {
hgs
parents:
diff changeset
  1242
    TVwsViewId id;
hgs
parents:
diff changeset
  1243
    id.iAppUid = KMceCBSApplication;
hgs
parents:
diff changeset
  1244
    id.iViewUid.iUid = KMceCBSApplicationStartView;
hgs
parents:
diff changeset
  1245
    ActivateViewL( id  );
hgs
parents:
diff changeset
  1246
    }
hgs
parents:
diff changeset
  1247
hgs
parents:
diff changeset
  1248
// ----------------------------------------------------
hgs
parents:
diff changeset
  1249
// CMceUi::LaunchServiceCommandEditorL
hgs
parents:
diff changeset
  1250
// ----------------------------------------------------
hgs
parents:
diff changeset
  1251
void CMceUi::LaunchServiceCommandEditorL() const
hgs
parents:
diff changeset
  1252
    {
hgs
parents:
diff changeset
  1253
    CPhCltUssd* ussdClient = CPhCltUssd::NewL( EFalse );
hgs
parents:
diff changeset
  1254
    CleanupStack::PushL( ussdClient );
hgs
parents:
diff changeset
  1255
    ussdClient->StartUssdEditor();
hgs
parents:
diff changeset
  1256
    CleanupStack::PopAndDestroy( ussdClient );
hgs
parents:
diff changeset
  1257
    }
hgs
parents:
diff changeset
  1258
hgs
parents:
diff changeset
  1259
// ----------------------------------------------------
hgs
parents:
diff changeset
  1260
// CMceUi::HandleResourceChangeL
hgs
parents:
diff changeset
  1261
// ----------------------------------------------------
hgs
parents:
diff changeset
  1262
void CMceUi::HandleResourceChangeL( TInt aType )
hgs
parents:
diff changeset
  1263
    {
hgs
parents:
diff changeset
  1264
    if ( !iServerStarted )
hgs
parents:
diff changeset
  1265
        {
hgs
parents:
diff changeset
  1266
    	return ;
hgs
parents:
diff changeset
  1267
        }
hgs
parents:
diff changeset
  1268
        
hgs
parents:
diff changeset
  1269
    CAknViewAppUi::HandleResourceChangeL( aType );
hgs
parents:
diff changeset
  1270
	// this is fix for setting the correct status pane id, if AVKON changes the status pane ids then there will be a problem
hgs
parents:
diff changeset
  1271
    TBool landscape( Layout_Meta_Data::IsLandscapeOrientation() );
hgs
parents:
diff changeset
  1272
    if(!landscape)
hgs
parents:
diff changeset
  1273
    {
hgs
parents:
diff changeset
  1274
    CEikStatusPane* statusPane = StatusPane();
hgs
parents:
diff changeset
  1275
    if(statusPane->CurrentLayoutResId()== R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT)
hgs
parents:
diff changeset
  1276
    {
hgs
parents:
diff changeset
  1277
    statusPane->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL_EXT );
hgs
parents:
diff changeset
  1278
    }
hgs
parents:
diff changeset
  1279
    }
hgs
parents:
diff changeset
  1280
    if( aType == KEikDynamicLayoutVariantSwitch )
hgs
parents:
diff changeset
  1281
        {
hgs
parents:
diff changeset
  1282
        if ( iLocalScreenClearer )
hgs
parents:
diff changeset
  1283
	          {
hgs
parents:
diff changeset
  1284
	          delete iLocalScreenClearer;
hgs
parents:
diff changeset
  1285
	          iLocalScreenClearer = NULL;	
hgs
parents:
diff changeset
  1286
	          iLocalScreenClearer = CAknLocalScreenClearer::NewL( ETrue );
hgs
parents:
diff changeset
  1287
	          }
hgs
parents:
diff changeset
  1288
hgs
parents:
diff changeset
  1289
        if ( MceViewActive( EMceDeliveryReportsViewActive ) )
hgs
parents:
diff changeset
  1290
            {
hgs
parents:
diff changeset
  1291
            iMceDeliveryView->HandleClientRectChange();
hgs
parents:
diff changeset
  1292
            }
hgs
parents:
diff changeset
  1293
        iMceMainView->HandleClientRectChange();
hgs
parents:
diff changeset
  1294
        
hgs
parents:
diff changeset
  1295
        CMceNaviPaneFolderIndicator* findicator =
hgs
parents:
diff changeset
  1296
            static_cast<CMceNaviPaneFolderIndicator*>( iFolderIndicator->DecoratedControl() );
hgs
parents:
diff changeset
  1297
        findicator->HandleResourceChange( aType );
hgs
parents:
diff changeset
  1298
        }
hgs
parents:
diff changeset
  1299
hgs
parents:
diff changeset
  1300
    if( aType == KAknsMessageSkinChange )
hgs
parents:
diff changeset
  1301
        {
hgs
parents:
diff changeset
  1302
        const TInt count = iUiRegistry->NumRegisteredMtmDlls();
hgs
parents:
diff changeset
  1303
        for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
  1304
            {
hgs
parents:
diff changeset
  1305
            iMtmStore->ReleaseMtmUiData( iUiRegistry->MtmTypeUid(i) );
hgs
parents:
diff changeset
  1306
            }
hgs
parents:
diff changeset
  1307
hgs
parents:
diff changeset
  1308
        iBitmapResolver->ChangeBitmapInIconArrayL();
hgs
parents:
diff changeset
  1309
        if ( !MceViewActive( EMceMainViewActive ) && iMceMainView )
hgs
parents:
diff changeset
  1310
            {
hgs
parents:
diff changeset
  1311
            //update the list icons, when delivery reports view is open and skin changes
hgs
parents:
diff changeset
  1312
            iMceMainView->ListContainer()->HandleResourceChange( aType );
hgs
parents:
diff changeset
  1313
            }
hgs
parents:
diff changeset
  1314
        if ( !MceViewActive(EMceMessageViewActive) && iMceListView 
hgs
parents:
diff changeset
  1315
            && iMceListView->ListContainer() )
hgs
parents:
diff changeset
  1316
            {
hgs
parents:
diff changeset
  1317
            iMceListView->ListContainer()->HandleResourceChange( aType );
hgs
parents:
diff changeset
  1318
            }
hgs
parents:
diff changeset
  1319
hgs
parents:
diff changeset
  1320
        LoadContextIconL();
hgs
parents:
diff changeset
  1321
        TitlePaneL()->DrawDeferred();
hgs
parents:
diff changeset
  1322
hgs
parents:
diff changeset
  1323
        CMceNaviPaneFolderIndicator* findicator =
hgs
parents:
diff changeset
  1324
            static_cast<CMceNaviPaneFolderIndicator*>( iFolderIndicator->DecoratedControl() );
hgs
parents:
diff changeset
  1325
        findicator->HandleResourceChange( aType );
hgs
parents:
diff changeset
  1326
hgs
parents:
diff changeset
  1327
        CAknContextPane* contextPane = (CAknContextPane *)(iEikonEnv->AppUiFactory(*this))
hgs
parents:
diff changeset
  1328
            ->StatusPane()->ControlL(TUid::Uid(EEikStatusPaneUidContext));
hgs
parents:
diff changeset
  1329
        contextPane->DrawDeferred();
hgs
parents:
diff changeset
  1330
        }
hgs
parents:
diff changeset
  1331
    if (iDecoratedTabGroup)
hgs
parents:
diff changeset
  1332
        {
hgs
parents:
diff changeset
  1333
        CAknTabGroup* tab = static_cast<CAknTabGroup*>( iDecoratedTabGroup->DecoratedControl() );
hgs
parents:
diff changeset
  1334
        if ( tab )
hgs
parents:
diff changeset
  1335
            {
hgs
parents:
diff changeset
  1336
            // Inform (possibly off-screen) tab group about the change
hgs
parents:
diff changeset
  1337
            tab->HandleResourceChange( aType );
hgs
parents:
diff changeset
  1338
            }
hgs
parents:
diff changeset
  1339
        }
hgs
parents:
diff changeset
  1340
hgs
parents:
diff changeset
  1341
    iResourceChangeCalled = ETrue;
hgs
parents:
diff changeset
  1342
    }
hgs
parents:
diff changeset
  1343
hgs
parents:
diff changeset
  1344
// ----------------------------------------------------
hgs
parents:
diff changeset
  1345
// CMceUi::CloseEditorApp
hgs
parents:
diff changeset
  1346
// ----------------------------------------------------
hgs
parents:
diff changeset
  1347
void CMceUi::CloseEditorApp()
hgs
parents:
diff changeset
  1348
    {
hgs
parents:
diff changeset
  1349
    if ( iEditorOperation )
hgs
parents:
diff changeset
  1350
        {
hgs
parents:
diff changeset
  1351
        TBool foundItem = EFalse;
hgs
parents:
diff changeset
  1352
        TMsvOp opId = iEditorOperation->Operation().Id();
hgs
parents:
diff changeset
  1353
hgs
parents:
diff changeset
  1354
        for (TInt cc=iOperations.Count()-1; cc>=0 && !foundItem; cc--)
hgs
parents:
diff changeset
  1355
            {
hgs
parents:
diff changeset
  1356
            if (iOperations[cc]->Operation().Id()==opId)
hgs
parents:
diff changeset
  1357
                {
hgs
parents:
diff changeset
  1358
                delete iOperations[cc];
hgs
parents:
diff changeset
  1359
                iOperations.Delete(cc);
hgs
parents:
diff changeset
  1360
                foundItem = ETrue;
hgs
parents:
diff changeset
  1361
                }
hgs
parents:
diff changeset
  1362
            }
hgs
parents:
diff changeset
  1363
        iEditorOperation = NULL;
hgs
parents:
diff changeset
  1364
hgs
parents:
diff changeset
  1365
        delete iLocalScreenClearer;
hgs
parents:
diff changeset
  1366
        iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  1367
        }
hgs
parents:
diff changeset
  1368
    }
hgs
parents:
diff changeset
  1369
hgs
parents:
diff changeset
  1370
// ----------------------------------------------------
hgs
parents:
diff changeset
  1371
// CMceUi::LoadContextIconL
hgs
parents:
diff changeset
  1372
// ----------------------------------------------------
hgs
parents:
diff changeset
  1373
void CMceUi::LoadContextIconL( )
hgs
parents:
diff changeset
  1374
    {
hgs
parents:
diff changeset
  1375
    CEikStatusPane *sp = ( (CAknAppUi*)iEikonEnv->EikAppUi() )->StatusPane();
hgs
parents:
diff changeset
  1376
    CAknContextPane* contextPane = (CAknContextPane *)sp->ControlL( 
hgs
parents:
diff changeset
  1377
        TUid::Uid(EEikStatusPaneUidContext) );
hgs
parents:
diff changeset
  1378
hgs
parents:
diff changeset
  1379
    RFs& fs=iEikonEnv->FsSession();
hgs
parents:
diff changeset
  1380
hgs
parents:
diff changeset
  1381
    MAknsSkinInstance* skins = AknsUtils::SkinInstance();
hgs
parents:
diff changeset
  1382
    CFbsBitmap* bitmap;
hgs
parents:
diff changeset
  1383
    CFbsBitmap* bitmapMask;
hgs
parents:
diff changeset
  1384
hgs
parents:
diff changeset
  1385
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
  1386
    TInt phoneDrive;
hgs
parents:
diff changeset
  1387
    // At this point, try avoid using any predefined numbers E.G. EDriveC
hgs
parents:
diff changeset
  1388
    // in order to increase the safety and code flexibility
hgs
parents:
diff changeset
  1389
    User::LeaveIfError( DriveInfo::GetDefaultDrive( DriveInfo:: EDefaultPhoneMemory, phoneDrive ) );
hgs
parents:
diff changeset
  1390
    if ( TInt( iSession->CurrentDriveL() ) != phoneDrive )
hgs
parents:
diff changeset
  1391
#else
hgs
parents:
diff changeset
  1392
    if ( TInt( iSession->CurrentDriveL()) == EDriveE )
hgs
parents:
diff changeset
  1393
#endif //RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
  1394
        {
hgs
parents:
diff changeset
  1395
#ifndef __SCALABLE_ICONS
hgs
parents:
diff changeset
  1396
        AknsUtils::CreateIconL( skins, KAknsIIDQgnMenuMceMmcCxt, bitmap,
hgs
parents:
diff changeset
  1397
           bitmapMask, iFilename, EMbmMuiuQgn_menu_mce_mmc_cxt,
hgs
parents:
diff changeset
  1398
           EMbmMuiuQgn_menu_mce_mmc_cxt + 1 );
hgs
parents:
diff changeset
  1399
#else
hgs
parents:
diff changeset
  1400
        AknsUtils::CreateIconL( skins, KAknsIIDQgnMenuMceMmcCxt, bitmap,
hgs
parents:
diff changeset
  1401
           bitmapMask, iFilename, EMbmMuiuQgn_menu_mce_mmc,
hgs
parents:
diff changeset
  1402
           EMbmMuiuQgn_menu_mce_mmc + 1 );
hgs
parents:
diff changeset
  1403
#endif
hgs
parents:
diff changeset
  1404
        }
hgs
parents:
diff changeset
  1405
    else
hgs
parents:
diff changeset
  1406
        {
hgs
parents:
diff changeset
  1407
#ifndef __SCALABLE_ICONS
hgs
parents:
diff changeset
  1408
        AknsUtils::CreateIconL( skins, KAknsIIDQgnMenuMceCxt, bitmap,
hgs
parents:
diff changeset
  1409
           bitmapMask, iFilename, EMbmMuiuQgn_menu_mce_cxt,
hgs
parents:
diff changeset
  1410
           EMbmMuiuQgn_menu_mce_cxt + 1 );
hgs
parents:
diff changeset
  1411
#else
hgs
parents:
diff changeset
  1412
        AknsUtils::CreateAppIconLC( skins, KMceApplicationUid, 
hgs
parents:
diff changeset
  1413
            EAknsAppIconTypeContext, bitmap, bitmapMask );
hgs
parents:
diff changeset
  1414
        CleanupStack::Pop( 2 ); // Both bitmaps are left in the cleanup stack
hgs
parents:
diff changeset
  1415
#endif
hgs
parents:
diff changeset
  1416
        }
hgs
parents:
diff changeset
  1417
    contextPane->SetPicture( bitmap, bitmapMask );
hgs
parents:
diff changeset
  1418
    }
hgs
parents:
diff changeset
  1419
hgs
parents:
diff changeset
  1420
// ----------------------------------------------------
hgs
parents:
diff changeset
  1421
// CMceUi::ResourceChangeCalled
hgs
parents:
diff changeset
  1422
// ----------------------------------------------------
hgs
parents:
diff changeset
  1423
TBool CMceUi::ResourceChangeCalled()
hgs
parents:
diff changeset
  1424
    {
hgs
parents:
diff changeset
  1425
    return iResourceChangeCalled;
hgs
parents:
diff changeset
  1426
    }
hgs
parents:
diff changeset
  1427
hgs
parents:
diff changeset
  1428
// ----------------------------------------------------
hgs
parents:
diff changeset
  1429
// CMceUi::ResetResourceChange
hgs
parents:
diff changeset
  1430
// ----------------------------------------------------
hgs
parents:
diff changeset
  1431
void CMceUi::ResetResourceChange()
hgs
parents:
diff changeset
  1432
    {
hgs
parents:
diff changeset
  1433
    iResourceChangeCalled = EFalse;
hgs
parents:
diff changeset
  1434
    }
hgs
parents:
diff changeset
  1435
hgs
parents:
diff changeset
  1436
// ----------------------------------------------------
hgs
parents:
diff changeset
  1437
// CMceUi::CheckTechnologyTypeFromMtm
hgs
parents:
diff changeset
  1438
// ----------------------------------------------------
hgs
parents:
diff changeset
  1439
TBool CMceUi::CheckTechnologyTypeFromMtm( const TUid aTechnologyType, TUid aMtmType )
hgs
parents:
diff changeset
  1440
    {
hgs
parents:
diff changeset
  1441
    TBool isMailMtm = EFalse;
hgs
parents:
diff changeset
  1442
    if ( aMtmType.iUid != 0 && aMtmType != KUidMsvLocalServiceMtm &&
hgs
parents:
diff changeset
  1443
         iUiRegistry->IsPresent( aMtmType ) )
hgs
parents:
diff changeset
  1444
    {
hgs
parents:
diff changeset
  1445
    // get MTM technology type
hgs
parents:
diff changeset
  1446
    TUid technologyType = iUiRegistry->TechnologyTypeUid( aMtmType );
hgs
parents:
diff changeset
  1447
        isMailMtm = ( aTechnologyType == technologyType );
hgs
parents:
diff changeset
  1448
        }
hgs
parents:
diff changeset
  1449
    return isMailMtm;
hgs
parents:
diff changeset
  1450
    }
hgs
parents:
diff changeset
  1451
hgs
parents:
diff changeset
  1452
hgs
parents:
diff changeset
  1453
hgs
parents:
diff changeset
  1454
hgs
parents:
diff changeset
  1455
hgs
parents:
diff changeset
  1456
// ----------------------------------------------------
hgs
parents:
diff changeset
  1457
// CMceUi::HandleMTMChangeL
hgs
parents:
diff changeset
  1458
// ----------------------------------------------------
hgs
parents:
diff changeset
  1459
void CMceUi::HandleMTMChangeL()
hgs
parents:
diff changeset
  1460
    {
hgs
parents:
diff changeset
  1461
    MCELOGGER_ENTERFN("HandleMTMChangeL()");
hgs
parents:
diff changeset
  1462
    if( !iMtmLoader )
hgs
parents:
diff changeset
  1463
        {
hgs
parents:
diff changeset
  1464
        iMtmLoader = new(ELeave) CMceIdleMtmLoader(
hgs
parents:
diff changeset
  1465
            *iMtmStore,
hgs
parents:
diff changeset
  1466
            iMsgTypesWritePopup,
hgs
parents:
diff changeset
  1467
            iMsgTypesWriteSubmenu,
hgs
parents:
diff changeset
  1468
            iMsgTypesSettings,
hgs
parents:
diff changeset
  1469
            *iMTMFunctionsArray,
hgs
parents:
diff changeset
  1470
            *iUiRegistry );
hgs
parents:
diff changeset
  1471
        }
hgs
parents:
diff changeset
  1472
    else
hgs
parents:
diff changeset
  1473
        {
hgs
parents:
diff changeset
  1474
        iMtmLoader->Cancel();
hgs
parents:
diff changeset
  1475
        }
hgs
parents:
diff changeset
  1476
hgs
parents:
diff changeset
  1477
    iMtmLoader->StartL(*iSession, iAudioMsgEnabled, iPostcardEnabled); // CR : 401-1806
hgs
parents:
diff changeset
  1478
    MCELOGGER_LEAVEFN("HandleMTMChangeL()");
hgs
parents:
diff changeset
  1479
    }
hgs
parents:
diff changeset
  1480
hgs
parents:
diff changeset
  1481
// ----------------------------------------------------
hgs
parents:
diff changeset
  1482
// CMceUi::GetMtmUiDataL
hgs
parents:
diff changeset
  1483
// will return NULL if no uiData found for entryType
hgs
parents:
diff changeset
  1484
// ----------------------------------------------------
hgs
parents:
diff changeset
  1485
CBaseMtmUiData* CMceUi::GetMtmUiDataL(TUid aMtm)
hgs
parents:
diff changeset
  1486
    {
hgs
parents:
diff changeset
  1487
    MCELOGGER_ENTERFN("GetMtmUiDataL()");
hgs
parents:
diff changeset
  1488
    MCELOGGER_WRITE_FORMAT("GetMtmUiDataL: mtm = 0x%x", aMtm.iUid );
hgs
parents:
diff changeset
  1489
hgs
parents:
diff changeset
  1490
    CBaseMtmUiData* uiData=NULL;
hgs
parents:
diff changeset
  1491
    if (iMtmStore)
hgs
parents:
diff changeset
  1492
        {
hgs
parents:
diff changeset
  1493
        TRAPD(error, ( uiData=&(iMtmStore->MtmUiDataL(aMtm)) ) );
hgs
parents:
diff changeset
  1494
        MCELOGGER_WRITE_FORMAT("GetMtmUiDataL: error = %d", error );
hgs
parents:
diff changeset
  1495
        if ( iMceUiFlags.MceFlag( EMceUiFlagsServerReady )  && error != KErrNotFound )
hgs
parents:
diff changeset
  1496
            {
hgs
parents:
diff changeset
  1497
            // KErrNotFound cover case where MTM is not installed but messages exist
hgs
parents:
diff changeset
  1498
            User::LeaveIfError( error );
hgs
parents:
diff changeset
  1499
            }
hgs
parents:
diff changeset
  1500
        }
hgs
parents:
diff changeset
  1501
    MCELOGGER_LEAVEFN("GetMtmUiDataL()");
hgs
parents:
diff changeset
  1502
    return uiData;
hgs
parents:
diff changeset
  1503
    }
hgs
parents:
diff changeset
  1504
hgs
parents:
diff changeset
  1505
// ----------------------------------------------------
hgs
parents:
diff changeset
  1506
// CMceUi::CanCreateNewAccountL
hgs
parents:
diff changeset
  1507
// ----------------------------------------------------
hgs
parents:
diff changeset
  1508
TBool CMceUi::CanCreateNewAccountL(TUid aMtm)
hgs
parents:
diff changeset
  1509
    {
hgs
parents:
diff changeset
  1510
    TBool canCreateNewAccount = EFalse;
hgs
parents:
diff changeset
  1511
    TMsvEntry serviceEntry;
hgs
parents:
diff changeset
  1512
    serviceEntry.iType=KUidMsvServiceEntry;
hgs
parents:
diff changeset
  1513
    serviceEntry.iMtm=aMtm;
hgs
parents:
diff changeset
  1514
hgs
parents:
diff changeset
  1515
    TInt rid;
hgs
parents:
diff changeset
  1516
    CBaseMtmUiData* uiData=GetMtmUiDataL(aMtm);
hgs
parents:
diff changeset
  1517
    if ( uiData && uiData->CanCreateEntryL( iRootEntry->Entry(), serviceEntry, rid ) )
hgs
parents:
diff changeset
  1518
        {
hgs
parents:
diff changeset
  1519
        canCreateNewAccount = ETrue;
hgs
parents:
diff changeset
  1520
        }
hgs
parents:
diff changeset
  1521
    return canCreateNewAccount;
hgs
parents:
diff changeset
  1522
    }
hgs
parents:
diff changeset
  1523
hgs
parents:
diff changeset
  1524
// ----------------------------------------------------
hgs
parents:
diff changeset
  1525
// CMceUi::DeleteAccountL
hgs
parents:
diff changeset
  1526
// ----------------------------------------------------
hgs
parents:
diff changeset
  1527
void CMceUi::DeleteAccountL(TMsvId aId)
hgs
parents:
diff changeset
  1528
    {
hgs
parents:
diff changeset
  1529
    TMsvEntry   entry;
hgs
parents:
diff changeset
  1530
    GetEntryL( aId, entry );
hgs
parents:
diff changeset
  1531
    const TUid mtm = entry.iMtm;
hgs
parents:
diff changeset
  1532
    CBaseMtmUi* ui = &iMtmStore->ClaimMtmUiL( mtm );
hgs
parents:
diff changeset
  1533
    if (ui)
hgs
parents:
diff changeset
  1534
        {
hgs
parents:
diff changeset
  1535
        CMtmStoreMtmReleaser::CleanupReleaseMtmUiLC(*iMtmStore, mtm);
hgs
parents:
diff changeset
  1536
        }
hgs
parents:
diff changeset
  1537
hgs
parents:
diff changeset
  1538
    CMsvOperation* op = NULL;
hgs
parents:
diff changeset
  1539
    __ASSERT_DEBUG( !iDeleteOperation,
hgs
parents:
diff changeset
  1540
        Panic( EMceUiErrAlreadyDeletingAccount ) );
hgs
parents:
diff changeset
  1541
hgs
parents:
diff changeset
  1542
// Free disk space request for delete to be added
hgs
parents:
diff changeset
  1543
hgs
parents:
diff changeset
  1544
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  1545
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  1546
hgs
parents:
diff changeset
  1547
    if (ui)
hgs
parents:
diff changeset
  1548
        {
hgs
parents:
diff changeset
  1549
        ui->BaseMtm().SetCurrentEntryL(iSession->GetEntryL(KMsvRootIndexEntryId));
hgs
parents:
diff changeset
  1550
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  1551
        op=ui->DeleteServiceL(entry, singleOpWatcher->iStatus);
hgs
parents:
diff changeset
  1552
        CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
  1553
        CleanupStack::PushL(op);
hgs
parents:
diff changeset
  1554
        }
hgs
parents:
diff changeset
  1555
    else
hgs
parents:
diff changeset
  1556
        {
hgs
parents:
diff changeset
  1557
        // could not load mtm, so delete as normal local entry
hgs
parents:
diff changeset
  1558
        iEntry->SetEntryL( KMsvRootIndexEntryId );
hgs
parents:
diff changeset
  1559
hgs
parents:
diff changeset
  1560
        CMsvProgressReporterOperation* progOp =
hgs
parents:
diff changeset
  1561
            CMsvProgressReporterOperation::NewL(
hgs
parents:
diff changeset
  1562
            *iSession, singleOpWatcher->iStatus, EMbmAvkonQgn_note_erased);
hgs
parents:
diff changeset
  1563
        CleanupStack::PushL( progOp );
hgs
parents:
diff changeset
  1564
hgs
parents:
diff changeset
  1565
        CMsvEntrySelection* selection = new( ELeave ) CMsvEntrySelection();
hgs
parents:
diff changeset
  1566
        CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  1567
        selection->AppendL( entry.Id() );
hgs
parents:
diff changeset
  1568
        CMsvOperation* subOp = iEntry->DeleteL( *selection, progOp->RequestStatus());
hgs
parents:
diff changeset
  1569
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  1570
        progOp->SetOperationL( subOp ); // this takes ownership immediately, so no cleanupstack needed.
hgs
parents:
diff changeset
  1571
        op = progOp;
hgs
parents:
diff changeset
  1572
        }
hgs
parents:
diff changeset
  1573
hgs
parents:
diff changeset
  1574
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  1575
    CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  1576
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  1577
    iDeleteOperation = singleOpWatcher;
hgs
parents:
diff changeset
  1578
    iMailboxDeleteOperation = op->Id();
hgs
parents:
diff changeset
  1579
    MCELOGGER_WRITE_FORMAT("free disk requested, iDeleteOperation set 0x%x", iDeleteOperation );
hgs
parents:
diff changeset
  1580
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  1581
hgs
parents:
diff changeset
  1582
// Cancel the free disk space request to be added
hgs
parents:
diff changeset
  1583
hgs
parents:
diff changeset
  1584
    if ( ui )
hgs
parents:
diff changeset
  1585
        {
hgs
parents:
diff changeset
  1586
        CleanupStack::PopAndDestroy();// release mtmUi
hgs
parents:
diff changeset
  1587
        }
hgs
parents:
diff changeset
  1588
hgs
parents:
diff changeset
  1589
    }
hgs
parents:
diff changeset
  1590
hgs
parents:
diff changeset
  1591
// ----------------------------------------------------
hgs
parents:
diff changeset
  1592
// CMceUi::SettingsDialogL
hgs
parents:
diff changeset
  1593
// ----------------------------------------------------
hgs
parents:
diff changeset
  1594
void CMceUi::SettingsDialogL()
hgs
parents:
diff changeset
  1595
    {
hgs
parents:
diff changeset
  1596
    CMceUidNameArray* tempArray = CMceUidNameArray::NewL();
hgs
parents:
diff changeset
  1597
hgs
parents:
diff changeset
  1598
    if (( iSelectableEmail )&& (!iEmailFramework))
hgs
parents:
diff changeset
  1599
        {
hgs
parents:
diff changeset
  1600
        CleanupStack::PushL( tempArray );
hgs
parents:
diff changeset
  1601
        const TInt count = iMsgTypesSettings.Count();
hgs
parents:
diff changeset
  1602
hgs
parents:
diff changeset
  1603
        // get all email accounts (visible)
hgs
parents:
diff changeset
  1604
        CArrayFix<TUid>* listItemUids =
hgs
parents:
diff changeset
  1605
            new ( ELeave ) CArrayFixFlat<TUid>( KMceArrayGranularity );
hgs
parents:
diff changeset
  1606
        CleanupStack::PushL(listItemUids);
hgs
parents:
diff changeset
  1607
        CMsvEntry* entry = iSession->GetEntryL( KMsvRootIndexEntryId );
hgs
parents:
diff changeset
  1608
        CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  1609
hgs
parents:
diff changeset
  1610
        TInt canCreateNew;   
hgs
parents:
diff changeset
  1611
hgs
parents:
diff changeset
  1612
        TInt cnt = entry->Count();
hgs
parents:
diff changeset
  1613
        if ( cnt != 0 )
hgs
parents:
diff changeset
  1614
            {
hgs
parents:
diff changeset
  1615
            entry->SetSortTypeL( TMsvSelectionOrdering(
hgs
parents:
diff changeset
  1616
                KMsvGroupByType | KMsvGroupByStandardFolders, EMsvSortByDetailsReverse, ETrue ) );
hgs
parents:
diff changeset
  1617
hgs
parents:
diff changeset
  1618
            // Add default item first
hgs
parents:
diff changeset
  1619
            for ( TInt cc = entry->Count(); --cc >= 0; )
hgs
parents:
diff changeset
  1620
                {
hgs
parents:
diff changeset
  1621
                TMsvEntry tentry = (*entry)[cc];                
hgs
parents:
diff changeset
  1622
hgs
parents:
diff changeset
  1623
                if ( tentry.iType.iUid == KUidMsvServiceEntryValue &&
hgs
parents:
diff changeset
  1624
                     tentry.Id() != KMsvLocalServiceIndexEntryIdValue )
hgs
parents:
diff changeset
  1625
                    {
hgs
parents:
diff changeset
  1626
                    const TBool noRelatedId = tentry.iRelatedId == KMsvNullIndexEntryId || tentry.iRelatedId == tentry.Id();
hgs
parents:
diff changeset
  1627
hgs
parents:
diff changeset
  1628
                    TBool appendEmail = EFalse;
hgs
parents:
diff changeset
  1629
hgs
parents:
diff changeset
  1630
                    if( tentry.Visible() )
hgs
parents:
diff changeset
  1631
                        {
hgs
parents:
diff changeset
  1632
                        appendEmail = ETrue;
hgs
parents:
diff changeset
  1633
                        }
hgs
parents:
diff changeset
  1634
                    else
hgs
parents:
diff changeset
  1635
                        {
hgs
parents:
diff changeset
  1636
                        CMtmUiDataRegistry* uiRegistry = CMtmUiDataRegistry::NewL( *iSession );                
hgs
parents:
diff changeset
  1637
                        CleanupStack::PushL(uiRegistry);
hgs
parents:
diff changeset
  1638
                        if ( uiRegistry->IsPresent( tentry.iMtm ) &&
hgs
parents:
diff changeset
  1639
                             uiRegistry->IsPresent( KUidMsgTypePOP3 ) )
hgs
parents:
diff changeset
  1640
                            {            
hgs
parents:
diff changeset
  1641
                            TUid mailMTMTechType = uiRegistry->TechnologyTypeUid( KUidMsgTypePOP3 );                                          
hgs
parents:
diff changeset
  1642
                            if( uiRegistry->TechnologyTypeUid( tentry.iMtm ) ==
hgs
parents:
diff changeset
  1643
                                mailMTMTechType )
hgs
parents:
diff changeset
  1644
                                {
hgs
parents:
diff changeset
  1645
                                appendEmail = ETrue;                    
hgs
parents:
diff changeset
  1646
                                }
hgs
parents:
diff changeset
  1647
                            }
hgs
parents:
diff changeset
  1648
                            CleanupStack::PopAndDestroy( uiRegistry );
hgs
parents:
diff changeset
  1649
                        } 
hgs
parents:
diff changeset
  1650
hgs
parents:
diff changeset
  1651
                    if ( appendEmail )
hgs
parents:
diff changeset
  1652
                        {                         
hgs
parents:
diff changeset
  1653
                        TBool append = ETrue; 
hgs
parents:
diff changeset
  1654
                        // query capability (new message)
hgs
parents:
diff changeset
  1655
                        TUid entryUid;
hgs
parents:
diff changeset
  1656
hgs
parents:
diff changeset
  1657
                        if ( tentry.iMtm == KSenduiMtmPop3Uid ||
hgs
parents:
diff changeset
  1658
                             tentry.iMtm == KSenduiMtmImap4Uid)
hgs
parents:
diff changeset
  1659
                            {                        
hgs
parents:
diff changeset
  1660
                            entryUid = KSenduiMtmSmtpUid;
hgs
parents:
diff changeset
  1661
                            }
hgs
parents:
diff changeset
  1662
                        else
hgs
parents:
diff changeset
  1663
                            {
hgs
parents:
diff changeset
  1664
                            entryUid = tentry.iMtm;     
hgs
parents:
diff changeset
  1665
                            }
hgs
parents:
diff changeset
  1666
hgs
parents:
diff changeset
  1667
                        CBaseMtmUiData* mtmUiData = NULL;
hgs
parents:
diff changeset
  1668
hgs
parents:
diff changeset
  1669
                        TRAPD( returnVal, mtmUiData =
hgs
parents:
diff changeset
  1670
                               &( iMtmStore->MtmUiDataL( entryUid ) ) );
hgs
parents:
diff changeset
  1671
hgs
parents:
diff changeset
  1672
                        if ( returnVal == KErrNone)
hgs
parents:
diff changeset
  1673
                            {
hgs
parents:
diff changeset
  1674
                            TInt ret = mtmUiData->QueryCapability( KUidMtmQueryCanSendMsg, canCreateNew );                                   
hgs
parents:
diff changeset
  1675
hgs
parents:
diff changeset
  1676
                            if ( ret == KErrNone ) 
hgs
parents:
diff changeset
  1677
                                {
hgs
parents:
diff changeset
  1678
                                append = ETrue;
hgs
parents:
diff changeset
  1679
                                }
hgs
parents:
diff changeset
  1680
                            else
hgs
parents:
diff changeset
  1681
                                {
hgs
parents:
diff changeset
  1682
                                append = EFalse;    
hgs
parents:
diff changeset
  1683
                                }                
hgs
parents:
diff changeset
  1684
                            }
hgs
parents:
diff changeset
  1685
                        else
hgs
parents:
diff changeset
  1686
                            {
hgs
parents:
diff changeset
  1687
                            append = EFalse;                                
hgs
parents:
diff changeset
  1688
                            }                            
hgs
parents:
diff changeset
  1689
hgs
parents:
diff changeset
  1690
                        iMtmStore->ReleaseMtmUiData( entryUid );                  
hgs
parents:
diff changeset
  1691
hgs
parents:
diff changeset
  1692
                        if( append )
hgs
parents:
diff changeset
  1693
                            {                     
hgs
parents:
diff changeset
  1694
                            listItemUids->AppendL( entryUid );
hgs
parents:
diff changeset
  1695
                            }
hgs
parents:
diff changeset
  1696
                        }
hgs
parents:
diff changeset
  1697
                    }
hgs
parents:
diff changeset
  1698
                }
hgs
parents:
diff changeset
  1699
            }
hgs
parents:
diff changeset
  1700
        TBool emailIncluded = EFalse;        
hgs
parents:
diff changeset
  1701
        TBool syncMLIncluded = EFalse;        
hgs
parents:
diff changeset
  1702
        TUid uidMsgValTypeEmailMtmVal = GetFsIntegratedEmailAppMtmPluginId(); 
hgs
parents:
diff changeset
  1703
        CDesCArrayFlat* items = new(ELeave)CDesCArrayFlat( KMceArrayGranularity );
hgs
parents:
diff changeset
  1704
        CleanupStack::PushL( items );
hgs
parents:
diff changeset
  1705
        for ( TInt loop = 0; loop < count ; loop++)
hgs
parents:
diff changeset
  1706
            {
hgs
parents:
diff changeset
  1707
            if ( FindMtmInVisibleListL( iMsgTypesSettings[loop].iUid, *listItemUids ) )
hgs
parents:
diff changeset
  1708
                {
hgs
parents:
diff changeset
  1709
                if ( !emailIncluded &&
hgs
parents:
diff changeset
  1710
                    ( iMsgTypesSettings[loop].iUid == KSenduiMtmSmtpUid ) ) 
hgs
parents:
diff changeset
  1711
                    {
hgs
parents:
diff changeset
  1712
                    tempArray->AppendL( iMsgTypesSettings[loop] );
hgs
parents:
diff changeset
  1713
                    emailIncluded = ETrue;
hgs
parents:
diff changeset
  1714
                    }                
hgs
parents:
diff changeset
  1715
                // Following is added because SyncML was missing from the list
hgs
parents:
diff changeset
  1716
                else if ( !syncMLIncluded &&
hgs
parents:
diff changeset
  1717
                          ( iMsgTypesSettings[loop].iUid == KSenduiMtmSyncMLEmailUid ) )
hgs
parents:
diff changeset
  1718
                    {
hgs
parents:
diff changeset
  1719
                    tempArray->AppendL( iMsgTypesSettings[loop] );
hgs
parents:
diff changeset
  1720
                    syncMLIncluded = ETrue;					
hgs
parents:
diff changeset
  1721
                    }
hgs
parents:
diff changeset
  1722
	        else if(iMsgTypesSettings[loop].iUid!=uidMsgValTypeEmailMtmVal)
hgs
parents:
diff changeset
  1723
                    {
hgs
parents:
diff changeset
  1724
                    tempArray->AppendL( iMsgTypesSettings[loop] );
hgs
parents:
diff changeset
  1725
                    }
hgs
parents:
diff changeset
  1726
                }
hgs
parents:
diff changeset
  1727
            else
hgs
parents:
diff changeset
  1728
                {
hgs
parents:
diff changeset
  1729
                tempArray->AppendL( iMsgTypesSettings[loop] );    
hgs
parents:
diff changeset
  1730
                }        
hgs
parents:
diff changeset
  1731
            }
hgs
parents:
diff changeset
  1732
            CleanupStack::PopAndDestroy( items ); 
hgs
parents:
diff changeset
  1733
            CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  1734
            CleanupStack::PopAndDestroy( listItemUids );
hgs
parents:
diff changeset
  1735
        }
hgs
parents:
diff changeset
  1736
    else if(iEmailFramework)  //Freestyle Feature is disabled and CMail Feature is enabled 
hgs
parents:
diff changeset
  1737
        {
hgs
parents:
diff changeset
  1738
        MCELOGGER_WRITE("CMceUi::SettingsDialogL: cmail ");
hgs
parents:
diff changeset
  1739
        CleanupStack::PushL( tempArray );
hgs
parents:
diff changeset
  1740
        const TInt count = iMsgTypesSettings.Count();
hgs
parents:
diff changeset
  1741
        for (TInt loop=0; loop < count; loop++)
hgs
parents:
diff changeset
  1742
            {
hgs
parents:
diff changeset
  1743
            if ( (iMsgTypesSettings[loop].iUid == KSenduiMtmSmtpUid ) ||
hgs
parents:
diff changeset
  1744
                    ( iMsgTypesSettings[loop].iUid == KSenduiMtmSyncMLEmailUid )||
hgs
parents:
diff changeset
  1745
                    (iMsgTypesSettings[loop].iUid == KUidMsgTypeFsMtmVal))
hgs
parents:
diff changeset
  1746
                {
hgs
parents:
diff changeset
  1747
                MCELOGGER_WRITE_FORMAT("not Loading %x", iMsgTypesSettings[loop].iUid );
hgs
parents:
diff changeset
  1748
                continue;
hgs
parents:
diff changeset
  1749
                }
hgs
parents:
diff changeset
  1750
            else
hgs
parents:
diff changeset
  1751
                {
hgs
parents:
diff changeset
  1752
                MCELOGGER_WRITE_FORMAT(" Loading %x", iMsgTypesSettings[loop].iUid);
hgs
parents:
diff changeset
  1753
                tempArray->AppendL( iMsgTypesSettings[loop] );
hgs
parents:
diff changeset
  1754
                }
hgs
parents:
diff changeset
  1755
            }
hgs
parents:
diff changeset
  1756
        }
hgs
parents:
diff changeset
  1757
    
hgs
parents:
diff changeset
  1758
    else    //Freestyle Feature is disabled and CMail Feature is disabled 
hgs
parents:
diff changeset
  1759
            
hgs
parents:
diff changeset
  1760
       {
hgs
parents:
diff changeset
  1761
hgs
parents:
diff changeset
  1762
    CleanupStack::PushL( tempArray );
hgs
parents:
diff changeset
  1763
    const TInt count = iMsgTypesSettings.Count();
hgs
parents:
diff changeset
  1764
    for (TInt loop=0; loop < count; loop++)
hgs
parents:
diff changeset
  1765
        {
hgs
parents:
diff changeset
  1766
        tempArray->AppendL( iMsgTypesSettings[loop] );
hgs
parents:
diff changeset
  1767
        }
hgs
parents:
diff changeset
  1768
		}
hgs
parents:
diff changeset
  1769
hgs
parents:
diff changeset
  1770
    TUid uid;
hgs
parents:
diff changeset
  1771
    uid.iUid = KMceAnswerToLifeUniverseAndEverything;
hgs
parents:
diff changeset
  1772
    // this is not used anywhere, two last items in the list are
hgs
parents:
diff changeset
  1773
    // ALWAYS cbs settings and mce general settings
hgs
parents:
diff changeset
  1774
hgs
parents:
diff changeset
  1775
    // Run time Cell Broadcast variant.
hgs
parents:
diff changeset
  1776
    TBool cbs = EFalse;
hgs
parents:
diff changeset
  1777
    if ( FeatureManager::FeatureSupported( KFeatureIdCellBroadcast ) )
hgs
parents:
diff changeset
  1778
        {
hgs
parents:
diff changeset
  1779
        cbs = ETrue;
hgs
parents:
diff changeset
  1780
        if ( iCsp )
hgs
parents:
diff changeset
  1781
            {
hgs
parents:
diff changeset
  1782
            cbs = CheckCspBitL();
hgs
parents:
diff changeset
  1783
            }
hgs
parents:
diff changeset
  1784
        }
hgs
parents:
diff changeset
  1785
    if ( cbs )
hgs
parents:
diff changeset
  1786
        {
hgs
parents:
diff changeset
  1787
        HBufC* text = StringLoader::LoadL( R_MCE_CBS_SETTINGS_TEXT, iEikonEnv );
hgs
parents:
diff changeset
  1788
        TUidNameInfo cbsSettings( uid, *text );
hgs
parents:
diff changeset
  1789
        delete text;
hgs
parents:
diff changeset
  1790
        tempArray->AppendL( cbsSettings );
hgs
parents:
diff changeset
  1791
        }
hgs
parents:
diff changeset
  1792
hgs
parents:
diff changeset
  1793
    HBufC* text = StringLoader::LoadL( R_MCE_GENERAL_SETTINGS_TEXT, iEikonEnv );
hgs
parents:
diff changeset
  1794
    TUidNameInfo generalSettings( uid, *text );
hgs
parents:
diff changeset
  1795
    delete text;
hgs
parents:
diff changeset
  1796
    tempArray->AppendL( generalSettings );
hgs
parents:
diff changeset
  1797
hgs
parents:
diff changeset
  1798
    // This is changed to automatic because local zoom should change only listbox zoom value
hgs
parents:
diff changeset
  1799
    // so settings dialog zoom value should come from general settings and so we need to change
hgs
parents:
diff changeset
  1800
    // local zoom to automatic before launching settings dialog
hgs
parents:
diff changeset
  1801
    // Is settings opened from General Settings
hgs
parents:
diff changeset
  1802
    CMuiuLock* repositoryLock = CMuiuLock::NewL( KMuiuLockSettings );
hgs
parents:
diff changeset
  1803
    CleanupStack::PushL(repositoryLock);
hgs
parents:
diff changeset
  1804
    TInt err = repositoryLock->Reserve();
hgs
parents:
diff changeset
  1805
hgs
parents:
diff changeset
  1806
    // Check that settings are not opened from General Settings
hgs
parents:
diff changeset
  1807
    if ( !err )
hgs
parents:
diff changeset
  1808
        {
hgs
parents:
diff changeset
  1809
        TAknUiZoom previous = ZoomLevelChangedL( EAknUiZoomAutomatic );
hgs
parents:
diff changeset
  1810
        iMceUiFlags.SetMceFlag( EMceUiFlagsSettingsDialogOpen );
hgs
parents:
diff changeset
  1811
        CMceSettingsDialog* dlg = CMceSettingsDialog::NewL( *tempArray, this, iSession);
hgs
parents:
diff changeset
  1812
        dlg->ExecuteLD();
hgs
parents:
diff changeset
  1813
        iMceUiFlags.ClearMceFlag( EMceUiFlagsSettingsDialogOpen );
hgs
parents:
diff changeset
  1814
        ZoomLevelChangedL( previous );
hgs
parents:
diff changeset
  1815
        }
hgs
parents:
diff changeset
  1816
    else
hgs
parents:
diff changeset
  1817
        {
hgs
parents:
diff changeset
  1818
        // Show information note: General Settings has opened settings
hgs
parents:
diff changeset
  1819
        CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(
hgs
parents:
diff changeset
  1820
            CAknNoteDialog::ENoTone, CAknNoteDialog::ELongTimeout);
hgs
parents:
diff changeset
  1821
        dlg->ExecuteLD(R_MCE_NOTE_SETTINGS_OPEN_GS);
hgs
parents:
diff changeset
  1822
hgs
parents:
diff changeset
  1823
        }
hgs
parents:
diff changeset
  1824
    // Release repository
hgs
parents:
diff changeset
  1825
    repositoryLock->Release();
hgs
parents:
diff changeset
  1826
    CleanupStack::PopAndDestroy( 2 ); // tempArray, repositoryLock
hgs
parents:
diff changeset
  1827
hgs
parents:
diff changeset
  1828
    }
hgs
parents:
diff changeset
  1829
hgs
parents:
diff changeset
  1830
// ----------------------------------------------------
hgs
parents:
diff changeset
  1831
// CMceUi::CreateNewMessageL
hgs
parents:
diff changeset
  1832
// Create a new message of the given type, in the given location
hgs
parents:
diff changeset
  1833
// ----------------------------------------------------
hgs
parents:
diff changeset
  1834
void CMceUi::CreateNewMessageL(TInt aMessageType)
hgs
parents:
diff changeset
  1835
    {
hgs
parents:
diff changeset
  1836
    __ASSERT_DEBUG( aMessageType != KUidMsvLocalServiceMtmValue,
hgs
parents:
diff changeset
  1837
        Panic( EMceUiErrLocalMtm ) );
hgs
parents:
diff changeset
  1838
    LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  1839
    TUid messageTypeOrig;
hgs
parents:
diff changeset
  1840
    messageTypeOrig.iUid = aMessageType;
hgs
parents:
diff changeset
  1841
    TUid msgTypeUid; 
hgs
parents:
diff changeset
  1842
    msgTypeUid.iUid = 0;
hgs
parents:
diff changeset
  1843
hgs
parents:
diff changeset
  1844
    TBool tabsToCleanupStack = EFalse;
hgs
parents:
diff changeset
  1845
    TMsvId service = KMsvNullIndexEntryId;
hgs
parents:
diff changeset
  1846
    if ( MceViewActive( EMceMessageViewActive ) && iMceListView )
hgs
parents:
diff changeset
  1847
        {
hgs
parents:
diff changeset
  1848
        const TMsvEntry& entry = iMceListView->ListContainer()->FolderEntry();
hgs
parents:
diff changeset
  1849
        //cmail change
hgs
parents:
diff changeset
  1850
        if ( (iSelectableEmail) && (!iEmailFramework ))
hgs
parents:
diff changeset
  1851
            {
hgs
parents:
diff changeset
  1852
            if ( entry.iMtm == KSenduiMtmImap4Uid ||
hgs
parents:
diff changeset
  1853
                entry.iMtm == KSenduiMtmPop3Uid )
hgs
parents:
diff changeset
  1854
            {
hgs
parents:
diff changeset
  1855
            service = entry.iServiceId;
hgs
parents:
diff changeset
  1856
            }
hgs
parents:
diff changeset
  1857
            }
hgs
parents:
diff changeset
  1858
        else
hgs
parents:
diff changeset
  1859
            {
hgs
parents:
diff changeset
  1860
	        if ( aMessageType == entry.iMtm.iUid ||
hgs
parents:
diff changeset
  1861
	            ( aMessageType == KSenduiMtmSmtpUidValue
hgs
parents:
diff changeset
  1862
	               && (entry.iMtm == KSenduiMtmImap4Uid
hgs
parents:
diff changeset
  1863
	               || entry.iMtm == KSenduiMtmPop3Uid ) ) )
hgs
parents:
diff changeset
  1864
            {
hgs
parents:
diff changeset
  1865
            service = entry.iServiceId;
hgs
parents:
diff changeset
  1866
            }
hgs
parents:
diff changeset
  1867
        }
hgs
parents:
diff changeset
  1868
        }
hgs
parents:
diff changeset
  1869
hgs
parents:
diff changeset
  1870
hgs
parents:
diff changeset
  1871
    if ( service == KMsvNullIndexEntryId )
hgs
parents:
diff changeset
  1872
        {
hgs
parents:
diff changeset
  1873
        //cmail change
hgs
parents:
diff changeset
  1874
        if ( (iSelectableEmail) && (!iEmailFramework ) )
hgs
parents:
diff changeset
  1875
            {
hgs
parents:
diff changeset
  1876
            if ( GetDefaultServiceL( aMessageType, service, msgTypeUid )
hgs
parents:
diff changeset
  1877
        	     == EFalse )        
hgs
parents:
diff changeset
  1878
                {
hgs
parents:
diff changeset
  1879
                return;
hgs
parents:
diff changeset
  1880
                }
hgs
parents:
diff changeset
  1881
            }
hgs
parents:
diff changeset
  1882
        else
hgs
parents:
diff changeset
  1883
            {
hgs
parents:
diff changeset
  1884
        GetDefaultServiceL( aMessageType, service );
hgs
parents:
diff changeset
  1885
        }
hgs
parents:
diff changeset
  1886
        }    
hgs
parents:
diff changeset
  1887
hgs
parents:
diff changeset
  1888
    if ( ((iSelectableEmail) && (!iEmailFramework ))&& ( messageTypeOrig == KSenduiMtmSmtpUid ) )
hgs
parents:
diff changeset
  1889
        {	
hgs
parents:
diff changeset
  1890
        if( ( msgTypeUid == KSenduiMtmSmtpUid) ||
hgs
parents:
diff changeset
  1891
            ( msgTypeUid.iUid == KMsvNullIndexEntryId ) )
hgs
parents:
diff changeset
  1892
            {
hgs
parents:
diff changeset
  1893
    msgTypeUid.iUid = aMessageType;
hgs
parents:
diff changeset
  1894
            }        
hgs
parents:
diff changeset
  1895
        }
hgs
parents:
diff changeset
  1896
    else
hgs
parents:
diff changeset
  1897
        {
hgs
parents:
diff changeset
  1898
        msgTypeUid.iUid = aMessageType;            
hgs
parents:
diff changeset
  1899
        } 
hgs
parents:
diff changeset
  1900
hgs
parents:
diff changeset
  1901
    if ( iMceUiFlags.MceFlag( EMceUiFlagsTabsActive ) )
hgs
parents:
diff changeset
  1902
        {
hgs
parents:
diff changeset
  1903
        // must remove tabs because if no mailboxes created then
hgs
parents:
diff changeset
  1904
        // mailbox settings dialog is displayed and tabs should not be shown then.
hgs
parents:
diff changeset
  1905
        RemoveTabs();
hgs
parents:
diff changeset
  1906
        CleanupStack::PushL( TCleanupItem( ShowTabs, this ) );
hgs
parents:
diff changeset
  1907
        tabsToCleanupStack = ETrue;
hgs
parents:
diff changeset
  1908
        }
hgs
parents:
diff changeset
  1909
hgs
parents:
diff changeset
  1910
    CreateAndEditNewEntryL(
hgs
parents:
diff changeset
  1911
        KUidMsvMessageEntryValue,
hgs
parents:
diff changeset
  1912
        msgTypeUid,
hgs
parents:
diff changeset
  1913
        KMsvDraftEntryId,
hgs
parents:
diff changeset
  1914
        service );
hgs
parents:
diff changeset
  1915
hgs
parents:
diff changeset
  1916
    if ( tabsToCleanupStack )
hgs
parents:
diff changeset
  1917
        {
hgs
parents:
diff changeset
  1918
        CleanupStack::PopAndDestroy(); // TCleanupItem - will show tabs again
hgs
parents:
diff changeset
  1919
        }
hgs
parents:
diff changeset
  1920
hgs
parents:
diff changeset
  1921
        // NCN reset does not requied for new email creation
hgs
parents:
diff changeset
  1922
    
hgs
parents:
diff changeset
  1923
hgs
parents:
diff changeset
  1924
    }
hgs
parents:
diff changeset
  1925
hgs
parents:
diff changeset
  1926
// ----------------------------------------------------
hgs
parents:
diff changeset
  1927
// CMceUi::ShowTabs
hgs
parents:
diff changeset
  1928
// Static function.
hgs
parents:
diff changeset
  1929
// Used in CreateNewMessageL as TCleanupItem.
hgs
parents:
diff changeset
  1930
// ----------------------------------------------------
hgs
parents:
diff changeset
  1931
void CMceUi::ShowTabs(TAny* aAny)
hgs
parents:
diff changeset
  1932
    {
hgs
parents:
diff changeset
  1933
    CMceUi* mceUi = (CMceUi*) aAny;
hgs
parents:
diff changeset
  1934
    if ( mceUi && mceUi->MceViewActive( EMceMessageViewActive ) && mceUi->iMceListView )
hgs
parents:
diff changeset
  1935
        {
hgs
parents:
diff changeset
  1936
        TRAP_IGNORE( mceUi->ShowTabsL( mceUi->iMceListView->ListContainer()->CurrentFolderId() ) );
hgs
parents:
diff changeset
  1937
        }
hgs
parents:
diff changeset
  1938
    }
hgs
parents:
diff changeset
  1939
hgs
parents:
diff changeset
  1940
// ----------------------------------------------------
hgs
parents:
diff changeset
  1941
// CMceUi::ResetEditorOperation
hgs
parents:
diff changeset
  1942
// Static function.
hgs
parents:
diff changeset
  1943
// Used in CreateNewMessageL as TCleanupItem.
hgs
parents:
diff changeset
  1944
// ----------------------------------------------------
hgs
parents:
diff changeset
  1945
void CMceUi::ResetEditorOperation(TAny* aAny)
hgs
parents:
diff changeset
  1946
    {
hgs
parents:
diff changeset
  1947
    CMceUi* mceUi = (CMceUi*) aAny;
hgs
parents:
diff changeset
  1948
    MCELOGGER_WRITE_FORMAT("ResetEditorOperation iEditorOperation 0x%x set NULL", mceUi->iEditorOperation );
hgs
parents:
diff changeset
  1949
    mceUi->iEditorOperation = NULL;
hgs
parents:
diff changeset
  1950
    }
hgs
parents:
diff changeset
  1951
hgs
parents:
diff changeset
  1952
// ----------------------------------------------------
hgs
parents:
diff changeset
  1953
// CMceUi::CreateAndEditNewEntryL
hgs
parents:
diff changeset
  1954
// ----------------------------------------------------
hgs
parents:
diff changeset
  1955
void CMceUi::CreateAndEditNewEntryL(TMsvId aParentId, TMsvEntry& aNewEntry)
hgs
parents:
diff changeset
  1956
    {
hgs
parents:
diff changeset
  1957
    MCELOGGER_ENTERFN("CreateAndEditNewEntryL()");
hgs
parents:
diff changeset
  1958
hgs
parents:
diff changeset
  1959
    LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  1960
hgs
parents:
diff changeset
  1961
    __ASSERT_DEBUG(aNewEntry.iMtm != KUidMsvLocalServiceMtm,
hgs
parents:
diff changeset
  1962
        Panic( EMceUiErrLocalMtm ) );
hgs
parents:
diff changeset
  1963
hgs
parents:
diff changeset
  1964
    aNewEntry.iDate.HomeTime();
hgs
parents:
diff changeset
  1965
hgs
parents:
diff changeset
  1966
    // --- Get the MTM UI relevant to the message type ---
hgs
parents:
diff changeset
  1967
    CBaseMtmUi& mtmUi = iMtmStore->GetMtmUiLC( aNewEntry.iMtm );
hgs
parents:
diff changeset
  1968
    CMsvEntry* centry = iSession->GetEntryL( aParentId );
hgs
parents:
diff changeset
  1969
    // this allocates memory so cleanupstack is needed
hgs
parents:
diff changeset
  1970
    CleanupStack::PushL( centry );
hgs
parents:
diff changeset
  1971
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  1972
hgs
parents:
diff changeset
  1973
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL(*this);
hgs
parents:
diff changeset
  1974
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  1975
hgs
parents:
diff changeset
  1976
    CleanupStack::PushL( TCleanupItem( ResetEditorOperation, this ) );
hgs
parents:
diff changeset
  1977
hgs
parents:
diff changeset
  1978
    mtmUi.SetPreferences( mtmUi.Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
  1979
    
hgs
parents:
diff changeset
  1980
    CMsvOperation* op = mtmUi.CreateL(
hgs
parents:
diff changeset
  1981
        aNewEntry,
hgs
parents:
diff changeset
  1982
        *centry,
hgs
parents:
diff changeset
  1983
        singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  1984
hgs
parents:
diff changeset
  1985
    MCELOGGER_WRITE_FORMAT("CreateAndEditNewEntryL: iEditorOperation set 0x%x", singleOpWatcher );
hgs
parents:
diff changeset
  1986
    iEditorOperation = singleOpWatcher;
hgs
parents:
diff changeset
  1987
hgs
parents:
diff changeset
  1988
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  1989
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  1990
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  1991
    CleanupStack::Pop( op ); // singleOpWatcher, op
hgs
parents:
diff changeset
  1992
    CleanupStack::Pop(); // ResetEditorOperation everything ok, don't reset iEditorOperation
hgs
parents:
diff changeset
  1993
    CleanupStack::Pop( singleOpWatcher );
hgs
parents:
diff changeset
  1994
hgs
parents:
diff changeset
  1995
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  1996
hgs
parents:
diff changeset
  1997
    if ( aNewEntry.iType == KUidMsvMessageEntry &&
hgs
parents:
diff changeset
  1998
        iUiRegistry &&
hgs
parents:
diff changeset
  1999
        iUiRegistry->IsPresent( op->Mtm() ) )
hgs
parents:
diff changeset
  2000
        {
hgs
parents:
diff changeset
  2001
        iMtmStore->ClaimMtmUiL( op->Mtm() );            
hgs
parents:
diff changeset
  2002
        }
hgs
parents:
diff changeset
  2003
hgs
parents:
diff changeset
  2004
    CleanupStack::PopAndDestroy(3); // CAknInputBlock, centry, release MtmUi
hgs
parents:
diff changeset
  2005
hgs
parents:
diff changeset
  2006
    if ( MceViewActive( EMceMessageViewActive ) )
hgs
parents:
diff changeset
  2007
        {
hgs
parents:
diff changeset
  2008
        iMceListView->ListContainer()->ClearSelection();
hgs
parents:
diff changeset
  2009
        }
hgs
parents:
diff changeset
  2010
hgs
parents:
diff changeset
  2011
    MCELOGGER_LEAVEFN("CreateAndEditNewEntryL()");
hgs
parents:
diff changeset
  2012
    }
hgs
parents:
diff changeset
  2013
hgs
parents:
diff changeset
  2014
// ----------------------------------------------------
hgs
parents:
diff changeset
  2015
// CMceUi::CreateAndEditNewEntryL
hgs
parents:
diff changeset
  2016
// ----------------------------------------------------
hgs
parents:
diff changeset
  2017
void CMceUi::CreateAndEditNewEntryL(
hgs
parents:
diff changeset
  2018
    TInt aEntryType,
hgs
parents:
diff changeset
  2019
    TUid aMtm,
hgs
parents:
diff changeset
  2020
    TMsvId aParentId,
hgs
parents:
diff changeset
  2021
    TMsvId aServiceId )
hgs
parents:
diff changeset
  2022
    {
hgs
parents:
diff changeset
  2023
    __ASSERT_DEBUG(aMtm != KUidMsvLocalServiceMtm,
hgs
parents:
diff changeset
  2024
        Panic( EMceUiErrLocalMtm ) );
hgs
parents:
diff changeset
  2025
    TMsvEntry nentry;
hgs
parents:
diff changeset
  2026
    nentry.iMtm = aMtm;
hgs
parents:
diff changeset
  2027
    nentry.iType.iUid = aEntryType;
hgs
parents:
diff changeset
  2028
    nentry.iDate.HomeTime();
hgs
parents:
diff changeset
  2029
    nentry.iServiceId = aServiceId;
hgs
parents:
diff changeset
  2030
    CreateAndEditNewEntryL( aParentId, nentry );
hgs
parents:
diff changeset
  2031
    }
hgs
parents:
diff changeset
  2032
hgs
parents:
diff changeset
  2033
// ----------------------------------------------------
hgs
parents:
diff changeset
  2034
// CMceUi::GetDefaultServiceL
hgs
parents:
diff changeset
  2035
// when MceIntegration runtime flag is on
hgs
parents:
diff changeset
  2036
// ----------------------------------------------------
hgs
parents:
diff changeset
  2037
TBool CMceUi::GetDefaultServiceL( TInt aMtm, TMsvId& aService, TUid& aMtmUid )
hgs
parents:
diff changeset
  2038
    {
hgs
parents:
diff changeset
  2039
    TBool retVal = ETrue;
hgs
parents:
diff changeset
  2040
    TUid mtm = { aMtm };       
hgs
parents:
diff changeset
  2041
hgs
parents:
diff changeset
  2042
    aService = MsvUiServiceUtilities::DefaultServiceForMTML( *iSession,
hgs
parents:
diff changeset
  2043
                                                             mtm,
hgs
parents:
diff changeset
  2044
                                                             ETrue );
hgs
parents:
diff changeset
  2045
hgs
parents:
diff changeset
  2046
    if ( mtm == KSenduiMtmImap4Uid || mtm == KSenduiMtmPop3Uid
hgs
parents:
diff changeset
  2047
            || mtm == KSenduiMtmSmtpUid )
hgs
parents:
diff changeset
  2048
        {
hgs
parents:
diff changeset
  2049
        retVal = CMceSettingsEmailSel::ShowSelectEmailDlgL( aService,  aMtmUid );
hgs
parents:
diff changeset
  2050
        }
hgs
parents:
diff changeset
  2051
hgs
parents:
diff changeset
  2052
    return retVal;
hgs
parents:
diff changeset
  2053
    }
hgs
parents:
diff changeset
  2054
hgs
parents:
diff changeset
  2055
// ----------------------------------------------------
hgs
parents:
diff changeset
  2056
// CMceUi::GetDefaultServiceL
hgs
parents:
diff changeset
  2057
// ----------------------------------------------------
hgs
parents:
diff changeset
  2058
void CMceUi::GetDefaultServiceL(TInt aMtm, TMsvId& aService)
hgs
parents:
diff changeset
  2059
    {
hgs
parents:
diff changeset
  2060
    TUid mtm = { aMtm };
hgs
parents:
diff changeset
  2061
hgs
parents:
diff changeset
  2062
    aService = MsvUiServiceUtilitiesInternal::DefaultServiceForMTML(
hgs
parents:
diff changeset
  2063
        *iSession,
hgs
parents:
diff changeset
  2064
        mtm,
hgs
parents:
diff changeset
  2065
        ETrue );
hgs
parents:
diff changeset
  2066
    }
hgs
parents:
diff changeset
  2067
hgs
parents:
diff changeset
  2068
// ----------------------------------------------------
hgs
parents:
diff changeset
  2069
// CMceUi::OpCompleted
hgs
parents:
diff changeset
  2070
// ----------------------------------------------------
hgs
parents:
diff changeset
  2071
void CMceUi::OpCompleted(
hgs
parents:
diff changeset
  2072
    CMsvSingleOpWatcher& aOpWatcher,
hgs
parents:
diff changeset
  2073
    TInt aCompletionCode )
hgs
parents:
diff changeset
  2074
    {
hgs
parents:
diff changeset
  2075
    MCELOGGER_ENTERFN("OpCompleted()");
hgs
parents:
diff changeset
  2076
    CMsvOperation* op=&aOpWatcher.Operation();
hgs
parents:
diff changeset
  2077
    MCELOGGER_WRITE_FORMAT("operation id=%d completed", op->Id() );
hgs
parents:
diff changeset
  2078
hgs
parents:
diff changeset
  2079
    // Store the command ID
hgs
parents:
diff changeset
  2080
    TMsvOp tempOpID = op->Id();
hgs
parents:
diff changeset
  2081
    TUid tempOpMtm = op->Mtm();
hgs
parents:
diff changeset
  2082
    
hgs
parents:
diff changeset
  2083
    if ( &aOpWatcher == iEditorOperation )
hgs
parents:
diff changeset
  2084
        {
hgs
parents:
diff changeset
  2085
        MCELOGGER_WRITE_FORMAT("iEditorOperation 0x%x set NULL", iEditorOperation );
hgs
parents:
diff changeset
  2086
        iEditorOperation = NULL;
hgs
parents:
diff changeset
  2087
        if ( iMtmStore && //tempOpMtm != KUidMsvLocalServiceMtm && tempOpMtm != KUidMsvNullEntry &&
hgs
parents:
diff changeset
  2088
            iUiRegistry &&
hgs
parents:
diff changeset
  2089
            iUiRegistry->IsPresent( tempOpMtm ) )
hgs
parents:
diff changeset
  2090
            {
hgs
parents:
diff changeset
  2091
            iMtmStore->ReleaseMtmUi( tempOpMtm );                
hgs
parents:
diff changeset
  2092
            }
hgs
parents:
diff changeset
  2093
        }
hgs
parents:
diff changeset
  2094
    
hgs
parents:
diff changeset
  2095
#ifdef _DEBUG
hgs
parents:
diff changeset
  2096
    TRAPD(ignore, DoOperationCompletedL(op, aCompletionCode));
hgs
parents:
diff changeset
  2097
    MCELOGGER_WRITE_FORMAT("DoOperationCompletedL ignore %d", ignore );
hgs
parents:
diff changeset
  2098
#else
hgs
parents:
diff changeset
  2099
    TRAP_IGNORE(DoOperationCompletedL(op, aCompletionCode));
hgs
parents:
diff changeset
  2100
#endif
hgs
parents:
diff changeset
  2101
hgs
parents:
diff changeset
  2102
    ClearDontExitOnNextOperationComplete();
hgs
parents:
diff changeset
  2103
    
hgs
parents:
diff changeset
  2104
    TBool foundItem = EFalse;
hgs
parents:
diff changeset
  2105
    for (TInt cc = iOperations.Count()-1; cc >= 0 && !foundItem; cc--)
hgs
parents:
diff changeset
  2106
        {
hgs
parents:
diff changeset
  2107
        if (iOperations[cc]->Operation().Id()==op->Id())
hgs
parents:
diff changeset
  2108
            {
hgs
parents:
diff changeset
  2109
            delete iOperations[cc];
hgs
parents:
diff changeset
  2110
            iOperations.Delete(cc);
hgs
parents:
diff changeset
  2111
            foundItem = ETrue;
hgs
parents:
diff changeset
  2112
            }
hgs
parents:
diff changeset
  2113
        }
hgs
parents:
diff changeset
  2114
hgs
parents:
diff changeset
  2115
    if ( &aOpWatcher == iDeleteOperation )
hgs
parents:
diff changeset
  2116
        {
hgs
parents:
diff changeset
  2117
        MCELOGGER_WRITE_FORMAT("iDeleteOperation 0x%x set NULL", iDeleteOperation );
hgs
parents:
diff changeset
  2118
        iDeleteOperation = NULL;
hgs
parents:
diff changeset
  2119
hgs
parents:
diff changeset
  2120
        if ( iMMSNotifications && iMMSNotifications->Count() > 0 )
hgs
parents:
diff changeset
  2121
            {
hgs
parents:
diff changeset
  2122
            //delete MMS notifications
hgs
parents:
diff changeset
  2123
            TBuf8<1> params;
hgs
parents:
diff changeset
  2124
            params.Append( KMceMMSNotifOne8 );
hgs
parents:
diff changeset
  2125
            TRAPD( error, HandleMMSNotificationsDeleteL( params ) );
hgs
parents:
diff changeset
  2126
            if ( error )
hgs
parents:
diff changeset
  2127
                {
hgs
parents:
diff changeset
  2128
                if ( !iMceErrorUi )
hgs
parents:
diff changeset
  2129
                    {
hgs
parents:
diff changeset
  2130
                    TRAP_IGNORE( iMceErrorUi = CErrorUI::NewL(*iCoeEnv) );
hgs
parents:
diff changeset
  2131
                    }
hgs
parents:
diff changeset
  2132
                if ( iMceErrorUi )
hgs
parents:
diff changeset
  2133
                    {
hgs
parents:
diff changeset
  2134
                    TRAP_IGNORE( iMceErrorUi->ShowGlobalErrorNoteL( error ) );
hgs
parents:
diff changeset
  2135
                    }
hgs
parents:
diff changeset
  2136
                // ignore
hgs
parents:
diff changeset
  2137
                }
hgs
parents:
diff changeset
  2138
            }
hgs
parents:
diff changeset
  2139
hgs
parents:
diff changeset
  2140
// Cancel free disk space request to be added
hgs
parents:
diff changeset
  2141
hgs
parents:
diff changeset
  2142
        }
hgs
parents:
diff changeset
  2143
hgs
parents:
diff changeset
  2144
    else if ( iMMSNotifications
hgs
parents:
diff changeset
  2145
        && ( tempOpMtm == KUidMsgMMSNotification ) )
hgs
parents:
diff changeset
  2146
        {
hgs
parents:
diff changeset
  2147
        // check if MMS notification delete failed
hgs
parents:
diff changeset
  2148
        TRAP_IGNORE( CheckMMSNotifDelFailedL() );
hgs
parents:
diff changeset
  2149
        }
hgs
parents:
diff changeset
  2150
    else
hgs
parents:
diff changeset
  2151
        {
hgs
parents:
diff changeset
  2152
        //nothing special done
hgs
parents:
diff changeset
  2153
        }
hgs
parents:
diff changeset
  2154
hgs
parents:
diff changeset
  2155
hgs
parents:
diff changeset
  2156
    if ( &aOpWatcher == iFetchNewOperation )
hgs
parents:
diff changeset
  2157
        {        
hgs
parents:
diff changeset
  2158
        iFetchNewOperation = NULL;
hgs
parents:
diff changeset
  2159
    // TODO
hgs
parents:
diff changeset
  2160
        if ( ( iMceListView->ListContainer()->Count() )
hgs
parents:
diff changeset
  2161
            && MceViewActive( EMceMessageViewActive ) )
hgs
parents:
diff changeset
  2162
            {        
hgs
parents:
diff changeset
  2163
//            iMceListView->ListContainer()->ListBox()->SetCurrentItemIndex( 0 );
hgs
parents:
diff changeset
  2164
//            iMceListView->ListContainer()->ListBox()->DrawDeferred();
hgs
parents:
diff changeset
  2165
            }
hgs
parents:
diff changeset
  2166
        }
hgs
parents:
diff changeset
  2167
hgs
parents:
diff changeset
  2168
// Email messages cannot be copied or moved, show the note
hgs
parents:
diff changeset
  2169
    if ( ( iMoveOrCopyMailOperation != -1 ) && ( iMoveOrCopyMailOperation == tempOpID ) )
hgs
parents:
diff changeset
  2170
        {
hgs
parents:
diff changeset
  2171
        TRAP_IGNORE( InformationNoteCannotMoveCopyEMailL() );
hgs
parents:
diff changeset
  2172
        }
hgs
parents:
diff changeset
  2173
hgs
parents:
diff changeset
  2174
    if ( iHandleNewMsgToInbox )
hgs
parents:
diff changeset
  2175
        {
hgs
parents:
diff changeset
  2176
        TRAP_IGNORE( HandleNewMsgToInboxL( EFalse, NULL ) );
hgs
parents:
diff changeset
  2177
        }
hgs
parents:
diff changeset
  2178
hgs
parents:
diff changeset
  2179
    __ASSERT_DEBUG( foundItem, Panic( EMceUiErrOperationNotFound ) );
hgs
parents:
diff changeset
  2180
    MCELOGGER_LEAVEFN("OpCompleted()");
hgs
parents:
diff changeset
  2181
    }
hgs
parents:
diff changeset
  2182
hgs
parents:
diff changeset
  2183
// ----------------------------------------------------
hgs
parents:
diff changeset
  2184
// CMceUi::DoOperationCompletedL
hgs
parents:
diff changeset
  2185
// ----------------------------------------------------
hgs
parents:
diff changeset
  2186
void CMceUi::DoOperationCompletedL(
hgs
parents:
diff changeset
  2187
    CMsvOperation* aOperation,
hgs
parents:
diff changeset
  2188
    TInt aCompletionCode )
hgs
parents:
diff changeset
  2189
    {
hgs
parents:
diff changeset
  2190
    __ASSERT_DEBUG( aOperation, Panic( EMceUiErrOperationNull ) );
hgs
parents:
diff changeset
  2191
    if ( !aOperation )
hgs
parents:
diff changeset
  2192
        {
hgs
parents:
diff changeset
  2193
        return;
hgs
parents:
diff changeset
  2194
        }
hgs
parents:
diff changeset
  2195
hgs
parents:
diff changeset
  2196
    if ( iLocalScreenClearer && 
hgs
parents:
diff changeset
  2197
         aCompletionCode != CMsgEmbeddedEditorWatchingOperation::EMsgExitNext &&
hgs
parents:
diff changeset
  2198
         aCompletionCode != CMsgEmbeddedEditorWatchingOperation::EMsgExitPrevious )
hgs
parents:
diff changeset
  2199
        {
hgs
parents:
diff changeset
  2200
        
hgs
parents:
diff changeset
  2201
        delete iLocalScreenClearer;
hgs
parents:
diff changeset
  2202
        iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  2203
        
hgs
parents:
diff changeset
  2204
        }
hgs
parents:
diff changeset
  2205
hgs
parents:
diff changeset
  2206
    MCELOGGER_WRITE_FORMAT("CMceUi::DoOperationCompletedL: aCompletionCode: %d", aCompletionCode );
hgs
parents:
diff changeset
  2207
    
hgs
parents:
diff changeset
  2208
    if ( aOperation->Id() == iMailboxDeleteOperation )
hgs
parents:
diff changeset
  2209
        {
hgs
parents:
diff changeset
  2210
        CMceMainViewListItemArray* array = iMceMainView->ListContainer()->ListItems();
hgs
parents:
diff changeset
  2211
        if ( array )
hgs
parents:
diff changeset
  2212
            {
hgs
parents:
diff changeset
  2213
            array->HandleSessionEventL(EMsvEntriesDeleted, NULL, NULL, NULL );
hgs
parents:
diff changeset
  2214
            }
hgs
parents:
diff changeset
  2215
        }
hgs
parents:
diff changeset
  2216
hgs
parents:
diff changeset
  2217
    if ( ViewUpdateSuppressionFlag() && iBlockingOperation == aOperation )
hgs
parents:
diff changeset
  2218
        {
hgs
parents:
diff changeset
  2219
        SetViewUpdateSuppressionFlag( EFalse, NULL );
hgs
parents:
diff changeset
  2220
        iMceListView->UpdateViewL();
hgs
parents:
diff changeset
  2221
        }
hgs
parents:
diff changeset
  2222
hgs
parents:
diff changeset
  2223
    TInt closedEntryId = 0;
hgs
parents:
diff changeset
  2224
    // Retrieve value of KMuiuKeyCurrentMsg
hgs
parents:
diff changeset
  2225
    TInt r = RProperty::Get( KPSUidMuiu, KMuiuKeyCurrentMsg, closedEntryId );
hgs
parents:
diff changeset
  2226
    if ( r != KErrNone )
hgs
parents:
diff changeset
  2227
        {
hgs
parents:
diff changeset
  2228
        closedEntryId = 0;
hgs
parents:
diff changeset
  2229
        }
hgs
parents:
diff changeset
  2230
    if ( aCompletionCode == EEikCmdExit &&
hgs
parents:
diff changeset
  2231
        !iMceUiFlags.MceFlag( EMceUiFlagsDoNotExitAfterNextOperationComplete ) )
hgs
parents:
diff changeset
  2232
        {
hgs
parents:
diff changeset
  2233
        MCELOGGER_WRITE("CMceUi::DoOperationCompletedL: EXIT");
hgs
parents:
diff changeset
  2234
        iAvkonViewAppUi->ProcessCommandL( EAknCmdHideInBackground );
hgs
parents:
diff changeset
  2235
        return;
hgs
parents:
diff changeset
  2236
        }
hgs
parents:
diff changeset
  2237
    // viewer next/prev
hgs
parents:
diff changeset
  2238
    else if ( aCompletionCode == CMsgEmbeddedEditorWatchingOperation::EMsgExitNext ||
hgs
parents:
diff changeset
  2239
        aCompletionCode == CMsgEmbeddedEditorWatchingOperation::EMsgExitPrevious )
hgs
parents:
diff changeset
  2240
        {
hgs
parents:
diff changeset
  2241
        MCELOGGER_WRITE("CMceUi::DoOperationCompletedL: Opening next/previous");
hgs
parents:
diff changeset
  2242
        HandleOpenNextPreviousL( aCompletionCode ==
hgs
parents:
diff changeset
  2243
            CMsgEmbeddedEditorWatchingOperation::EMsgExitNext );
hgs
parents:
diff changeset
  2244
        if ( !IsForeground() )
hgs
parents:
diff changeset
  2245
            {
hgs
parents:
diff changeset
  2246
             // bring mce application to foreground
hgs
parents:
diff changeset
  2247
            iEikonEnv->RootWin().SetOrdinalPosition(0);
hgs
parents:
diff changeset
  2248
            }
hgs
parents:
diff changeset
  2249
        return;
hgs
parents:
diff changeset
  2250
        }
hgs
parents:
diff changeset
  2251
    else
hgs
parents:
diff changeset
  2252
        {
hgs
parents:
diff changeset
  2253
        // Viewer closed
hgs
parents:
diff changeset
  2254
        if ( closedEntryId > 0 )
hgs
parents:
diff changeset
  2255
            {
hgs
parents:
diff changeset
  2256
            CMceMessageListContainerBase* container = iMceListView->ListContainer();
hgs
parents:
diff changeset
  2257
            if ( container )
hgs
parents:
diff changeset
  2258
                {
hgs
parents:
diff changeset
  2259
                container->SetCurrentItemIdL( closedEntryId );
hgs
parents:
diff changeset
  2260
                }
hgs
parents:
diff changeset
  2261
            }
hgs
parents:
diff changeset
  2262
         }
hgs
parents:
diff changeset
  2263
hgs
parents:
diff changeset
  2264
    if ( !iMceErrorUi )
hgs
parents:
diff changeset
  2265
        {
hgs
parents:
diff changeset
  2266
        iMceErrorUi = CErrorUI::NewL(*iCoeEnv);
hgs
parents:
diff changeset
  2267
        }
hgs
parents:
diff changeset
  2268
hgs
parents:
diff changeset
  2269
    if ( aCompletionCode == KMsvIndexRestore )
hgs
parents:
diff changeset
  2270
        {
hgs
parents:
diff changeset
  2271
        iMceErrorUi->ShowGlobalErrorNoteL( aCompletionCode );
hgs
parents:
diff changeset
  2272
        }
hgs
parents:
diff changeset
  2273
hgs
parents:
diff changeset
  2274
    const TDesC8& progress = aOperation->ProgressL();
hgs
parents:
diff changeset
  2275
hgs
parents:
diff changeset
  2276
    if (aOperation->Mtm() != KUidMsvLocalServiceMtm )
hgs
parents:
diff changeset
  2277
        {
hgs
parents:
diff changeset
  2278
        MCELOGGER_WRITE_FORMAT("CMceUi::DoOperationCompletedL: calling mtm ui 0x%x DisplayProgressSummary", aOperation->Mtm().iUid );
hgs
parents:
diff changeset
  2279
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  2280
        CMtmStore* mtmStore=CMtmStore::NewL(*iSession);
hgs
parents:
diff changeset
  2281
        CleanupStack::PushL( mtmStore );
hgs
parents:
diff changeset
  2282
        
hgs
parents:
diff changeset
  2283
        CBaseMtmUi& ui = mtmStore->GetMtmUiLC( aOperation->Mtm() );
hgs
parents:
diff changeset
  2284
        if ( aOperation->Service() > KFirstFreeEntryId
hgs
parents:
diff changeset
  2285
            && ( aOperation->Mtm() == KSenduiMtmImap4Uid
hgs
parents:
diff changeset
  2286
            || aOperation->Mtm() == KSenduiMtmPop3Uid ) )
hgs
parents:
diff changeset
  2287
            {
hgs
parents:
diff changeset
  2288
            ui.BaseMtm().SwitchCurrentEntryL( aOperation->Service() );
hgs
parents:
diff changeset
  2289
            }
hgs
parents:
diff changeset
  2290
        ui.DisplayProgressSummary( progress );
hgs
parents:
diff changeset
  2291
        CleanupStack::PopAndDestroy( 3 ); // CAknInputBlock, mtmStore, release mtmUi        
hgs
parents:
diff changeset
  2292
        MCELOGGER_WRITE("DisplayProgressSummary done");
hgs
parents:
diff changeset
  2293
        return;
hgs
parents:
diff changeset
  2294
        }
hgs
parents:
diff changeset
  2295
hgs
parents:
diff changeset
  2296
    if (progress.Length() == 0)
hgs
parents:
diff changeset
  2297
        {
hgs
parents:
diff changeset
  2298
        return;
hgs
parents:
diff changeset
  2299
        }
hgs
parents:
diff changeset
  2300
hgs
parents:
diff changeset
  2301
    TMsvLocalOperationProgress localprogress =
hgs
parents:
diff changeset
  2302
        McliUtils::GetLocalProgressL( *aOperation );
hgs
parents:
diff changeset
  2303
hgs
parents:
diff changeset
  2304
    if ( ( aCompletionCode == KErrNone
hgs
parents:
diff changeset
  2305
        || aCompletionCode == KErrCancel )
hgs
parents:
diff changeset
  2306
        && ( localprogress.iError == KErrNone
hgs
parents:
diff changeset
  2307
        || localprogress.iError == KErrCancel ) )
hgs
parents:
diff changeset
  2308
        {
hgs
parents:
diff changeset
  2309
        return;
hgs
parents:
diff changeset
  2310
        }
hgs
parents:
diff changeset
  2311
hgs
parents:
diff changeset
  2312
    MCELOGGER_WRITE_FORMAT("CMceUi::DoOperationCompletedL, localProgress.iType %d", localprogress.iType )
hgs
parents:
diff changeset
  2313
    MCELOGGER_WRITE_FORMAT("error %d", localprogress.iError?localprogress.iError:aCompletionCode )
hgs
parents:
diff changeset
  2314
hgs
parents:
diff changeset
  2315
    iMceErrorUi->ShowGlobalErrorNoteL( localprogress.iError?localprogress.iError:aCompletionCode );
hgs
parents:
diff changeset
  2316
    }
hgs
parents:
diff changeset
  2317
hgs
parents:
diff changeset
  2318
// ----------------------------------------------------
hgs
parents:
diff changeset
  2319
// CMceUi::CreateNewFolderL
hgs
parents:
diff changeset
  2320
// ----------------------------------------------------
hgs
parents:
diff changeset
  2321
void CMceUi::CreateNewFolderL()
hgs
parents:
diff changeset
  2322
    {
hgs
parents:
diff changeset
  2323
    LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  2324
hgs
parents:
diff changeset
  2325
    TMsvEntry newFolder;
hgs
parents:
diff changeset
  2326
    const TMsvId parentId=iMceListView->ListContainer()->CurrentFolderId();
hgs
parents:
diff changeset
  2327
    if ( parentId != KMceDocumentsEntryId )
hgs
parents:
diff changeset
  2328
        {
hgs
parents:
diff changeset
  2329
#if defined(_DEBUG)
hgs
parents:
diff changeset
  2330
        Panic( EMceUiErrCannotCreateFolder );
hgs
parents:
diff changeset
  2331
#endif
hgs
parents:
diff changeset
  2332
        return;
hgs
parents:
diff changeset
  2333
        }
hgs
parents:
diff changeset
  2334
hgs
parents:
diff changeset
  2335
    _LIT(KMceFormatFolderName, "%S(%02d)");
hgs
parents:
diff changeset
  2336
    TBuf<KMceMaxFolderLength> folderName;
hgs
parents:
diff changeset
  2337
    TInt num = 0;
hgs
parents:
diff changeset
  2338
    TBuf<KMceTextLength> defaultFolderName;
hgs
parents:
diff changeset
  2339
    StringLoader::Load( defaultFolderName, R_MCE_DEFAULT_FOLDER_NAME, iEikonEnv );
hgs
parents:
diff changeset
  2340
    folderName.Copy( defaultFolderName );
hgs
parents:
diff changeset
  2341
    while( iMceListView->IsFolderNameUsedL( folderName ) )
hgs
parents:
diff changeset
  2342
        {
hgs
parents:
diff changeset
  2343
        num++;
hgs
parents:
diff changeset
  2344
        folderName.Format( KMceFormatFolderName, &defaultFolderName, num );
hgs
parents:
diff changeset
  2345
        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( folderName );
hgs
parents:
diff changeset
  2346
        }
hgs
parents:
diff changeset
  2347
hgs
parents:
diff changeset
  2348
    if ( FolderNameQueryL( R_MCE_CREATE_FOLDER, folderName ) )
hgs
parents:
diff changeset
  2349
        {
hgs
parents:
diff changeset
  2350
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  2351
        CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  2352
        CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  2353
hgs
parents:
diff changeset
  2354
        iEntry->SetEntryL( parentId );
hgs
parents:
diff changeset
  2355
        newFolder.iDate.HomeTime();
hgs
parents:
diff changeset
  2356
        newFolder.iDetails.Set( folderName );
hgs
parents:
diff changeset
  2357
        newFolder.iType = KUidMsvFolderEntry;
hgs
parents:
diff changeset
  2358
        newFolder.iMtm = iEntry->Entry().iMtm;
hgs
parents:
diff changeset
  2359
        newFolder.iServiceId= iEntry->OwningService();
hgs
parents:
diff changeset
  2360
hgs
parents:
diff changeset
  2361
        CMsvOperation* op = iEntry->CreateL( newFolder, singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  2362
        CleanupStack::PushL( op );
hgs
parents:
diff changeset
  2363
        iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  2364
        CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  2365
        singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  2366
        MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  2367
        CleanupStack::PopAndDestroy(); //CAknInputBlock
hgs
parents:
diff changeset
  2368
        }
hgs
parents:
diff changeset
  2369
    }
hgs
parents:
diff changeset
  2370
hgs
parents:
diff changeset
  2371
// ----------------------------------------------------
hgs
parents:
diff changeset
  2372
// CMceUi::RenameFolderL
hgs
parents:
diff changeset
  2373
// ----------------------------------------------------
hgs
parents:
diff changeset
  2374
void CMceUi::RenameFolderL()
hgs
parents:
diff changeset
  2375
    {
hgs
parents:
diff changeset
  2376
    const CMceMessageListContainerBase* container = iMceListView->ListContainer();
hgs
parents:
diff changeset
  2377
    TMsvId currentId = container->CurrentItemId();
hgs
parents:
diff changeset
  2378
hgs
parents:
diff changeset
  2379
    CMsvEntry* centry=iSession->GetEntryL( currentId );
hgs
parents:
diff changeset
  2380
    CleanupStack::PushL( centry );
hgs
parents:
diff changeset
  2381
    TMsvEntry entry = centry->Entry();
hgs
parents:
diff changeset
  2382
hgs
parents:
diff changeset
  2383
    __ASSERT_DEBUG(entry.iType == KUidMsvFolderEntry,
hgs
parents:
diff changeset
  2384
        Panic(EMceUiErrRenameNotFolder));
hgs
parents:
diff changeset
  2385
    __ASSERT_DEBUG(entry.iMtm == KUidMsvLocalServiceMtm,
hgs
parents:
diff changeset
  2386
        Panic(EMceUiErrRenameNotLocal));
hgs
parents:
diff changeset
  2387
hgs
parents:
diff changeset
  2388
hgs
parents:
diff changeset
  2389
    TBuf<KMceMaxFolderLength> buf = entry.iDetails.Left( KMceMaxFolderLength );
hgs
parents:
diff changeset
  2390
    if ( FolderNameQueryL( R_MCE_CREATE_FOLDER, buf, entry.Id() ) )
hgs
parents:
diff changeset
  2391
        {
hgs
parents:
diff changeset
  2392
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  2393
        CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  2394
        CleanupStack::PushL(singleOpWatcher);
hgs
parents:
diff changeset
  2395
        iEntry->SetEntryL( entry.Id() );
hgs
parents:
diff changeset
  2396
        entry.iDetails.Set( buf );
hgs
parents:
diff changeset
  2397
        CMsvOperation* op = iEntry->ChangeL( entry, singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  2398
        CleanupStack::PushL( op );
hgs
parents:
diff changeset
  2399
        iOperations.AppendL(singleOpWatcher);
hgs
parents:
diff changeset
  2400
        CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  2401
        singleOpWatcher->SetOperation(op);
hgs
parents:
diff changeset
  2402
        MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  2403
        CleanupStack::PopAndDestroy(); //CAknInputBlock
hgs
parents:
diff changeset
  2404
        }
hgs
parents:
diff changeset
  2405
    CleanupStack::PopAndDestroy( centry );
hgs
parents:
diff changeset
  2406
    }
hgs
parents:
diff changeset
  2407
hgs
parents:
diff changeset
  2408
// ----------------------------------------------------
hgs
parents:
diff changeset
  2409
// CMceUi::FolderNameQueryL
hgs
parents:
diff changeset
  2410
// ----------------------------------------------------
hgs
parents:
diff changeset
  2411
TBool CMceUi::FolderNameQueryL(
hgs
parents:
diff changeset
  2412
    const TInt aResourceId,
hgs
parents:
diff changeset
  2413
    TDes& aFolderName,
hgs
parents:
diff changeset
  2414
    const TMsvId aFolderId /*= KMsvNullIndexEntryId */ ) const
hgs
parents:
diff changeset
  2415
    {
hgs
parents:
diff changeset
  2416
    CAknTextQueryDialog* dlg = NULL;
hgs
parents:
diff changeset
  2417
    TInt button = 0;
hgs
parents:
diff changeset
  2418
    TBool okToStop = EFalse;
hgs
parents:
diff changeset
  2419
    while ( !okToStop )
hgs
parents:
diff changeset
  2420
        {
hgs
parents:
diff changeset
  2421
        dlg = CAknTextQueryDialog::NewL( aFolderName );
hgs
parents:
diff changeset
  2422
        dlg->SetMaxLength( KMceMaxFolderLength );
hgs
parents:
diff changeset
  2423
        button = dlg->ExecuteLD( aResourceId );
hgs
parents:
diff changeset
  2424
        if ( button )
hgs
parents:
diff changeset
  2425
            {
hgs
parents:
diff changeset
  2426
            MceUtils::ReplaceCharacters( aFolderName );
hgs
parents:
diff changeset
  2427
            if ( iMceListView->IsFolderNameUsedL( aFolderName, aFolderId ) )
hgs
parents:
diff changeset
  2428
                {
hgs
parents:
diff changeset
  2429
                HBufC* errorText = StringLoader::LoadLC(
hgs
parents:
diff changeset
  2430
                    R_MCE_DUPLICATE_FOLDER_TEXT, aFolderName, iEikonEnv );
hgs
parents:
diff changeset
  2431
                CAknInformationNote* note = new(ELeave)CAknInformationNote( ETrue );
hgs
parents:
diff changeset
  2432
                note->ExecuteLD(*errorText);
hgs
parents:
diff changeset
  2433
                CleanupStack::PopAndDestroy( errorText );
hgs
parents:
diff changeset
  2434
                }
hgs
parents:
diff changeset
  2435
            else
hgs
parents:
diff changeset
  2436
                {
hgs
parents:
diff changeset
  2437
                okToStop = ETrue;
hgs
parents:
diff changeset
  2438
                }
hgs
parents:
diff changeset
  2439
            }
hgs
parents:
diff changeset
  2440
        else
hgs
parents:
diff changeset
  2441
            {
hgs
parents:
diff changeset
  2442
            okToStop = ETrue;
hgs
parents:
diff changeset
  2443
            }
hgs
parents:
diff changeset
  2444
        }
hgs
parents:
diff changeset
  2445
    return button;
hgs
parents:
diff changeset
  2446
    }
hgs
parents:
diff changeset
  2447
hgs
parents:
diff changeset
  2448
// ----------------------------------------------------
hgs
parents:
diff changeset
  2449
// CMceUi::CloseConnectionsBeforeExitL
hgs
parents:
diff changeset
  2450
// ----------------------------------------------------
hgs
parents:
diff changeset
  2451
void CMceUi::CloseConnectionsBeforeExitL()
hgs
parents:
diff changeset
  2452
    {
hgs
parents:
diff changeset
  2453
    CMsvEntrySelection* connectedAccounts = ConnectedServicesLC();
hgs
parents:
diff changeset
  2454
    const TInt numberOfConnectedMailboxes = connectedAccounts->Count();
hgs
parents:
diff changeset
  2455
    TInt mceConnected = numberOfConnectedMailboxes;
hgs
parents:
diff changeset
  2456
hgs
parents:
diff changeset
  2457
    if ( iAlwaysOnline )
hgs
parents:
diff changeset
  2458
        {
hgs
parents:
diff changeset
  2459
        TMsvId account;
hgs
parents:
diff changeset
  2460
        TMsvEntry entry;
hgs
parents:
diff changeset
  2461
        TMsvId service;
hgs
parents:
diff changeset
  2462
hgs
parents:
diff changeset
  2463
        for ( TInt cc = 0; cc < numberOfConnectedMailboxes; cc++ )
hgs
parents:
diff changeset
  2464
            {
hgs
parents:
diff changeset
  2465
            account = connectedAccounts->At( cc );
hgs
parents:
diff changeset
  2466
            User::LeaveIfError( iSession->GetEntry(account,service,entry) );
hgs
parents:
diff changeset
  2467
// Get the allways online mail settings
hgs
parents:
diff changeset
  2468
            CImumInSettingsData* settings =
hgs
parents:
diff changeset
  2469
                iEmailApi->MailboxServicesL().LoadMailboxSettingsL( account );
hgs
parents:
diff changeset
  2470
            CleanupStack::PushL( settings );
hgs
parents:
diff changeset
  2471
hgs
parents:
diff changeset
  2472
            if ( !ServiceIdFound( account ) && 
hgs
parents:
diff changeset
  2473
                iMceMainView->ListContainer()->ListItems()->
hgs
parents:
diff changeset
  2474
                    AlwaysOnlineAccountL( account, *settings ) )
hgs
parents:
diff changeset
  2475
                {
hgs
parents:
diff changeset
  2476
                //this is a real always online account and not connected from mce
hgs
parents:
diff changeset
  2477
                mceConnected--;
hgs
parents:
diff changeset
  2478
                }
hgs
parents:
diff changeset
  2479
hgs
parents:
diff changeset
  2480
            CleanupStack::PopAndDestroy( settings ); // extendedMailSettings
hgs
parents:
diff changeset
  2481
            }
hgs
parents:
diff changeset
  2482
        }
hgs
parents:
diff changeset
  2483
hgs
parents:
diff changeset
  2484
    if ( mceConnected > 0 )
hgs
parents:
diff changeset
  2485
        {
hgs
parents:
diff changeset
  2486
        TBool disconnectMailboxes = ETrue;
hgs
parents:
diff changeset
  2487
        if( iEmailClientIntegration && iSelectableEmail )
hgs
parents:
diff changeset
  2488
            {
hgs
parents:
diff changeset
  2489
            //no need to go through the disconnection logic since the FS is enabled
hgs
parents:
diff changeset
  2490
            disconnectMailboxes = EFalse;
hgs
parents:
diff changeset
  2491
            iMceUiFlags.SetMceFlag( EMceUiFlagsWantToExit );
hgs
parents:
diff changeset
  2492
            }
hgs
parents:
diff changeset
  2493
        else
hgs
parents:
diff changeset
  2494
        if ( MceViewActive( EMceMainViewActive )
hgs
parents:
diff changeset
  2495
            || ( MceViewActive( EMceMessageViewActive )
hgs
parents:
diff changeset
  2496
            && iMceListView->IsMSKMailBox() ) )
hgs
parents:
diff changeset
  2497
            {
hgs
parents:
diff changeset
  2498
        CAknQueryDialog* confDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  2499
        confDialog->PrepareLC( R_MCE_CONFIRMATION );
hgs
parents:
diff changeset
  2500
        HBufC* titleText = NULL;
hgs
parents:
diff changeset
  2501
        if ( numberOfConnectedMailboxes == 1 )
hgs
parents:
diff changeset
  2502
            {
hgs
parents:
diff changeset
  2503
            titleText = StringLoader::LoadLC(
hgs
parents:
diff changeset
  2504
                R_MCE_CONNECTION_ON_TEXT,
hgs
parents:
diff changeset
  2505
                iEikonEnv );
hgs
parents:
diff changeset
  2506
            }
hgs
parents:
diff changeset
  2507
        else
hgs
parents:
diff changeset
  2508
            {
hgs
parents:
diff changeset
  2509
            titleText = StringLoader::LoadLC(
hgs
parents:
diff changeset
  2510
                R_MCE_CONNECTION_ON_MANY_TEXT,
hgs
parents:
diff changeset
  2511
                iEikonEnv );
hgs
parents:
diff changeset
  2512
            }
hgs
parents:
diff changeset
  2513
hgs
parents:
diff changeset
  2514
        confDialog->SetPromptL( *titleText );
hgs
parents:
diff changeset
  2515
        CleanupStack::PopAndDestroy( titleText );
hgs
parents:
diff changeset
  2516
hgs
parents:
diff changeset
  2517
            if ( !confDialog->RunLD() )
hgs
parents:
diff changeset
  2518
                {
hgs
parents:
diff changeset
  2519
                disconnectMailboxes = EFalse;
hgs
parents:
diff changeset
  2520
                }
hgs
parents:
diff changeset
  2521
            }
hgs
parents:
diff changeset
  2522
        if ( disconnectMailboxes )
hgs
parents:
diff changeset
  2523
            {
hgs
parents:
diff changeset
  2524
            iMceUiFlags.SetMceFlag( EMceUiFlagsExitAfterDisconnect  );
hgs
parents:
diff changeset
  2525
            for ( TInt loop = 0; loop < numberOfConnectedMailboxes; loop++ )
hgs
parents:
diff changeset
  2526
                {
hgs
parents:
diff changeset
  2527
                GoOfflineSynchronouslyL( connectedAccounts->At( loop ) );
hgs
parents:
diff changeset
  2528
                }
hgs
parents:
diff changeset
  2529
            if (iMceUiFlags.MceFlag( EMceUiFlagsExitAfterDisconnect ) )
hgs
parents:
diff changeset
  2530
                {
hgs
parents:
diff changeset
  2531
                iMceUiFlags.SetMceFlag( EMceUiFlagsWantToExit );
hgs
parents:
diff changeset
  2532
                }
hgs
parents:
diff changeset
  2533
            }
hgs
parents:
diff changeset
  2534
        }
hgs
parents:
diff changeset
  2535
    else
hgs
parents:
diff changeset
  2536
        {
hgs
parents:
diff changeset
  2537
        iMceUiFlags.SetMceFlag( EMceUiFlagsWantToExit );
hgs
parents:
diff changeset
  2538
        }
hgs
parents:
diff changeset
  2539
    CleanupStack::PopAndDestroy(); // connectedAccounts
hgs
parents:
diff changeset
  2540
    }
hgs
parents:
diff changeset
  2541
hgs
parents:
diff changeset
  2542
// ----------------------------------------------------
hgs
parents:
diff changeset
  2543
// CMceUi::ConnectedServicesLC
hgs
parents:
diff changeset
  2544
// ----------------------------------------------------
hgs
parents:
diff changeset
  2545
CMsvEntrySelection* CMceUi::ConnectedServicesLC()
hgs
parents:
diff changeset
  2546
    {
hgs
parents:
diff changeset
  2547
    MCELOGGER_ENTERFN("ConnectedServicesLC()");
hgs
parents:
diff changeset
  2548
hgs
parents:
diff changeset
  2549
    CMsvEntrySelection* connectedAccounts = new(ELeave) CMsvEntrySelection();
hgs
parents:
diff changeset
  2550
    CleanupStack::PushL(connectedAccounts);
hgs
parents:
diff changeset
  2551
hgs
parents:
diff changeset
  2552
    CMsvEntrySelection* sel = MsvUiServiceUtilities::GetListOfAccountsL(
hgs
parents:
diff changeset
  2553
        *iSession );
hgs
parents:
diff changeset
  2554
    CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  2555
    const TUid  connectCapability={KUidMsvMtmUiQueryConnectionOrientedServices};
hgs
parents:
diff changeset
  2556
hgs
parents:
diff changeset
  2557
    CBaseMtmUiData* uiData=NULL;
hgs
parents:
diff changeset
  2558
    TUid uid;
hgs
parents:
diff changeset
  2559
    const TInt numAccounts=sel->Count();
hgs
parents:
diff changeset
  2560
    for (TInt cc=0; cc<numAccounts; cc++)
hgs
parents:
diff changeset
  2561
        {
hgs
parents:
diff changeset
  2562
         uid.iUid=sel->At(cc);
hgs
parents:
diff changeset
  2563
         const TMsvEntry& tentry=iRootEntry->ChildDataL(uid.iUid);
hgs
parents:
diff changeset
  2564
         // if cmail  feature is enabled, no need to add cmail account in connectedAccounts.
hgs
parents:
diff changeset
  2565
         if ( !( iEmailFramework && 
hgs
parents:
diff changeset
  2566
               ( tentry.iMtm == KSenduiMtmImap4Uid || tentry.iMtm == KSenduiMtmPop3Uid ||
hgs
parents:
diff changeset
  2567
                 tentry.iMtm.iUid == KUidMsgTypeFsMtmVal )))
hgs
parents:
diff changeset
  2568
             {
hgs
parents:
diff changeset
  2569
              TRAPD(error, ( uiData=GetMtmUiDataL(tentry.iMtm) ) );
hgs
parents:
diff changeset
  2570
              if (error==KErrNone && uiData)
hgs
parents:
diff changeset
  2571
                 {
hgs
parents:
diff changeset
  2572
                  TInt rid;
hgs
parents:
diff changeset
  2573
                  if (uiData->QueryCapability(connectCapability, rid)==KErrNone)
hgs
parents:
diff changeset
  2574
                     {
hgs
parents:
diff changeset
  2575
                      if (tentry.Connected())
hgs
parents:
diff changeset
  2576
                         {
hgs
parents:
diff changeset
  2577
                          connectedAccounts->AppendL( sel->At(cc) );
hgs
parents:
diff changeset
  2578
                         }
hgs
parents:
diff changeset
  2579
                     }
hgs
parents:
diff changeset
  2580
                 }
hgs
parents:
diff changeset
  2581
             }  
hgs
parents:
diff changeset
  2582
        }
hgs
parents:
diff changeset
  2583
    CleanupStack::PopAndDestroy( sel );
hgs
parents:
diff changeset
  2584
    MCELOGGER_LEAVEFN("ConnectedServicesLC()");
hgs
parents:
diff changeset
  2585
    return connectedAccounts;
hgs
parents:
diff changeset
  2586
    }
hgs
parents:
diff changeset
  2587
hgs
parents:
diff changeset
  2588
// ----------------------------------------------------
hgs
parents:
diff changeset
  2589
// CMceUi::OpenFolderViewL
hgs
parents:
diff changeset
  2590
// ----------------------------------------------------
hgs
parents:
diff changeset
  2591
void CMceUi::OpenFolderViewL( TMsvId aFolderId )
hgs
parents:
diff changeset
  2592
    {
hgs
parents:
diff changeset
  2593
    iMceListView->SetFolderL( aFolderId );
hgs
parents:
diff changeset
  2594
    ActivateLocalViewL( KMceMessageListViewId );
hgs
parents:
diff changeset
  2595
    }
hgs
parents:
diff changeset
  2596
hgs
parents:
diff changeset
  2597
// ----------------------------------------------------
hgs
parents:
diff changeset
  2598
// CMceUi::OpenRemoteMailboxViewL
hgs
parents:
diff changeset
  2599
// ----------------------------------------------------
hgs
parents:
diff changeset
  2600
void CMceUi::OpenRemoteMailboxViewL( TMsvId aFolderId )
hgs
parents:
diff changeset
  2601
    {
hgs
parents:
diff changeset
  2602
        // NCN reset, if the mail folder contains unread messages
hgs
parents:
diff changeset
  2603
    TBool unreadMessages = EFalse;
hgs
parents:
diff changeset
  2604
#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
  2605
	TRAPD(err, ( unreadMessages = iBitmapResolver->HasUnreadMessagesL(aFolderId) ) );
hgs
parents:
diff changeset
  2606
#else   
hgs
parents:
diff changeset
  2607
    TInt messageCount = 0;
hgs
parents:
diff changeset
  2608
    TInt unreadCount = 0;
hgs
parents:
diff changeset
  2609
    TRAPD(err, ( unreadMessages = iBitmapResolver->HasUnreadMessagesL(aFolderId, messageCount, unreadCount) ) );
hgs
parents:
diff changeset
  2610
#endif // RD_MSG_NAVIPANE_IMPROVEMENT     
hgs
parents:
diff changeset
  2611
    if (err == KErrNone && unreadMessages )
hgs
parents:
diff changeset
  2612
        {
hgs
parents:
diff changeset
  2613
        HandleNotif(aFolderId);
hgs
parents:
diff changeset
  2614
        }    
hgs
parents:
diff changeset
  2615
    OpenFolderViewL( aFolderId );
hgs
parents:
diff changeset
  2616
    ShowTabsL( aFolderId );
hgs
parents:
diff changeset
  2617
    }
hgs
parents:
diff changeset
  2618
hgs
parents:
diff changeset
  2619
// ----------------------------------------------------
hgs
parents:
diff changeset
  2620
// CMceUi::CancelMailboxTimer
hgs
parents:
diff changeset
  2621
// ----------------------------------------------------
hgs
parents:
diff changeset
  2622
void CMceUi::CancelMailboxTimer()
hgs
parents:
diff changeset
  2623
    {
hgs
parents:
diff changeset
  2624
    if ( iConnectMailboxTimer && iConnectMailboxTimer->IsActive() )
hgs
parents:
diff changeset
  2625
        {
hgs
parents:
diff changeset
  2626
        iConnectMailboxTimer->Cancel();
hgs
parents:
diff changeset
  2627
        }
hgs
parents:
diff changeset
  2628
    }
hgs
parents:
diff changeset
  2629
hgs
parents:
diff changeset
  2630
// ----------------------------------------------------
hgs
parents:
diff changeset
  2631
// CMceUi::EditMTMEntryL
hgs
parents:
diff changeset
  2632
// ----------------------------------------------------
hgs
parents:
diff changeset
  2633
void CMceUi::EditMTMEntryL( const TMsvEntry& aEntry /*, TBool aOpen*/)
hgs
parents:
diff changeset
  2634
    {
hgs
parents:
diff changeset
  2635
    // Define KPSUidMuiu property to be integer type
hgs
parents:
diff changeset
  2636
    TInt r = RProperty::Define( KPSUidMuiu, KMuiuKeyCurrentMsg, RProperty::EInt );
hgs
parents:
diff changeset
  2637
    if ( r != KErrAlreadyExists )
hgs
parents:
diff changeset
  2638
        {
hgs
parents:
diff changeset
  2639
        User::LeaveIfError( r );
hgs
parents:
diff changeset
  2640
        }
hgs
parents:
diff changeset
  2641
    
hgs
parents:
diff changeset
  2642
     r = RProperty::Define( KPSUidMuiu, KMuiuKeyNextMsg, RProperty::EInt );
hgs
parents:
diff changeset
  2643
     if ( r != KErrAlreadyExists )
hgs
parents:
diff changeset
  2644
         {
hgs
parents:
diff changeset
  2645
         User::LeaveIfError( r );
hgs
parents:
diff changeset
  2646
         }
hgs
parents:
diff changeset
  2647
hgs
parents:
diff changeset
  2648
    // Set entry Id value to property
hgs
parents:
diff changeset
  2649
    if ( aEntry.iType == KUidMsvMessageEntry )
hgs
parents:
diff changeset
  2650
        {
hgs
parents:
diff changeset
  2651
        r = RProperty::Set( KPSUidMuiu, KMuiuKeyCurrentMsg, aEntry.Id() );
hgs
parents:
diff changeset
  2652
        r = RProperty::Set( KPSUidMuiu, KMuiuKeyNextMsg, 0 );
hgs
parents:
diff changeset
  2653
        }
hgs
parents:
diff changeset
  2654
hgs
parents:
diff changeset
  2655
    TBool tabsToCleanupStack = EFalse;
hgs
parents:
diff changeset
  2656
hgs
parents:
diff changeset
  2657
    CBaseMtmUi& mtmUi=iMtmStore->GetMtmUiAndSetContextLC( aEntry );
hgs
parents:
diff changeset
  2658
    mtmUi.SetPreferences( mtmUi.Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
  2659
hgs
parents:
diff changeset
  2660
    CMsvOperation* op = NULL;
hgs
parents:
diff changeset
  2661
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  2662
hgs
parents:
diff changeset
  2663
    CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  2664
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  2665
    if (aEntry.iType == KUidMsvMessageEntry )
hgs
parents:
diff changeset
  2666
        {
hgs
parents:
diff changeset
  2667
        MCELOGGER_WRITE_FORMAT("EditMTMEntryL: iEditorOperation set 0x%x", singleOpWatcher );
hgs
parents:
diff changeset
  2668
        iEditorOperation = singleOpWatcher;
hgs
parents:
diff changeset
  2669
        }
hgs
parents:
diff changeset
  2670
    CleanupStack::PushL( TCleanupItem( ResetEditorOperation, this ) );
hgs
parents:
diff changeset
  2671
    
hgs
parents:
diff changeset
  2672
hgs
parents:
diff changeset
  2673
    if ( aEntry.iType == KUidMsvServiceEntry )
hgs
parents:
diff changeset
  2674
        {
hgs
parents:
diff changeset
  2675
        if ( iMceUiFlags.MceFlag( EMceUiFlagsTabsActive ) )
hgs
parents:
diff changeset
  2676
            {
hgs
parents:
diff changeset
  2677
            // must remove tabs because if no mailboxes created then
hgs
parents:
diff changeset
  2678
            // mailbox settings dialog is displayed and tabs should not be shown then.
hgs
parents:
diff changeset
  2679
            RemoveTabs();
hgs
parents:
diff changeset
  2680
            CleanupStack::PushL( TCleanupItem( ShowTabs, this ) );
hgs
parents:
diff changeset
  2681
            tabsToCleanupStack = ETrue;
hgs
parents:
diff changeset
  2682
            }
hgs
parents:
diff changeset
  2683
        TAknUiZoom previous = ZoomLevelChangedL( EAknUiZoomAutomatic );
hgs
parents:
diff changeset
  2684
        op=mtmUi.EditL( singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  2685
        ZoomLevelChangedL( previous );
hgs
parents:
diff changeset
  2686
hgs
parents:
diff changeset
  2687
        if ( tabsToCleanupStack )
hgs
parents:
diff changeset
  2688
            {
hgs
parents:
diff changeset
  2689
            CleanupStack::PopAndDestroy(); // TCleanupItem - will show tabs again
hgs
parents:
diff changeset
  2690
            }
hgs
parents:
diff changeset
  2691
        if ( iMceUiFlags.MceFlag( EMceUiFlagsTabsActive )  && (!tabsToCleanupStack) )
hgs
parents:
diff changeset
  2692
            {
hgs
parents:
diff changeset
  2693
            ShowTabsL( iMceListView->ListContainer()->CurrentFolderId() );
hgs
parents:
diff changeset
  2694
            }
hgs
parents:
diff changeset
  2695
        }
hgs
parents:
diff changeset
  2696
    else
hgs
parents:
diff changeset
  2697
        {
hgs
parents:
diff changeset
  2698
hgs
parents:
diff changeset
  2699
        ReleaseMtmUiData();
hgs
parents:
diff changeset
  2700
hgs
parents:
diff changeset
  2701
        TRAPD( error, ( op=mtmUi.OpenL(singleOpWatcher->iStatus ) ) );
hgs
parents:
diff changeset
  2702
        if ( error )
hgs
parents:
diff changeset
  2703
            {
hgs
parents:
diff changeset
  2704
            // the returned error ofCBaseMtmUi code is defined in e32err.h instead of DocumentHandler.h
hgs
parents:
diff changeset
  2705
            // KMimeNotSupported(-12003) and KErrNotSupported(-5) has same meaning but different value
hgs
parents:
diff changeset
  2706
            // Solution: add the corresponding error code from e32err.h : (KErrUnknown, KErrAccessDenied ?)
hgs
parents:
diff changeset
  2707
            if ( error == KMimeNotSupported || error == KBadMimeType || error == KExecNotAllowed
hgs
parents:
diff changeset
  2708
                || error == KErrNotSupported || error == KErrUnknown || error == KErrAccessDenied )
hgs
parents:
diff changeset
  2709
                {
hgs
parents:
diff changeset
  2710
                //cannot be opened, mark read
hgs
parents:
diff changeset
  2711
                CMsvEntry* cEntry;
hgs
parents:
diff changeset
  2712
                cEntry = &(mtmUi.BaseMtm().Entry());
hgs
parents:
diff changeset
  2713
                TMsvEntry entry = cEntry->Entry();
hgs
parents:
diff changeset
  2714
                entry.SetUnread( EFalse );
hgs
parents:
diff changeset
  2715
                cEntry->ChangeL( entry );
hgs
parents:
diff changeset
  2716
                }
hgs
parents:
diff changeset
  2717
hgs
parents:
diff changeset
  2718
            // HandleOpenL is Trapped in MceOneRowListContainer to show error note we need to do it by ourselves
hgs
parents:
diff changeset
  2719
             delete op; // op should be null if leave occurs but make sure it is not leaked.
hgs
parents:
diff changeset
  2720
             HBufC* buf = 0;
hgs
parents:
diff changeset
  2721
             HandleErrorL(error, &buf);
hgs
parents:
diff changeset
  2722
             delete buf;
hgs
parents:
diff changeset
  2723
             CleanupStack::PopAndDestroy( 4 ); 
hgs
parents:
diff changeset
  2724
             if (error && iLocalScreenClearer )
hgs
parents:
diff changeset
  2725
                 {
hgs
parents:
diff changeset
  2726
                 delete iLocalScreenClearer;
hgs
parents:
diff changeset
  2727
                 iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  2728
                 }
hgs
parents:
diff changeset
  2729
             return;
hgs
parents:
diff changeset
  2730
                         
hgs
parents:
diff changeset
  2731
            //User::Leave( error );
hgs
parents:
diff changeset
  2732
            }
hgs
parents:
diff changeset
  2733
            
hgs
parents:
diff changeset
  2734
        CMceMessageListContainerBase* listContainer = iMceListView->ListContainer();
hgs
parents:
diff changeset
  2735
        if ( listContainer )
hgs
parents:
diff changeset
  2736
            {
hgs
parents:
diff changeset
  2737
            listContainer->UpdateIconArrayL();
hgs
parents:
diff changeset
  2738
            }
hgs
parents:
diff changeset
  2739
            
hgs
parents:
diff changeset
  2740
    	// the check has been added for email mailbox, need not to clear the screen
hgs
parents:
diff changeset
  2741
    	if ( !iLocalScreenClearer &&
hgs
parents:
diff changeset
  2742
             !CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, aEntry.iMtm ))       
hgs
parents:
diff changeset
  2743
	        {
hgs
parents:
diff changeset
  2744
	        iLocalScreenClearer = CAknLocalScreenClearer::NewL( ETrue );
hgs
parents:
diff changeset
  2745
	        }            
hgs
parents:
diff changeset
  2746
        }
hgs
parents:
diff changeset
  2747
hgs
parents:
diff changeset
  2748
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  2749
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  2750
    CleanupStack::Pop( 3 ); // singleOpWatcher, ResetEditorOperation op
hgs
parents:
diff changeset
  2751
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  2752
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  2753
    if ( aEntry.iType == KUidMsvMessageEntry &&
hgs
parents:
diff changeset
  2754
        iUiRegistry &&
hgs
parents:
diff changeset
  2755
        iUiRegistry->IsPresent( op->Mtm() ) )
hgs
parents:
diff changeset
  2756
        {
hgs
parents:
diff changeset
  2757
        iMtmStore->ClaimMtmUiL( aEntry.iMtm );            
hgs
parents:
diff changeset
  2758
        }
hgs
parents:
diff changeset
  2759
    CleanupStack::PopAndDestroy( 2 ); // CAknInputBlock, release mtmUi
hgs
parents:
diff changeset
  2760
    }
hgs
parents:
diff changeset
  2761
hgs
parents:
diff changeset
  2762
// ----------------------------------------------------
hgs
parents:
diff changeset
  2763
// CMceUi::CreateNewAccountL
hgs
parents:
diff changeset
  2764
// ----------------------------------------------------
hgs
parents:
diff changeset
  2765
TBool CMceUi::CreateNewAccountL(
hgs
parents:
diff changeset
  2766
    TUid aMessageType,
hgs
parents:
diff changeset
  2767
    TMsvId aOldServiceId /* = KMsvNullIndexEntryId */)
hgs
parents:
diff changeset
  2768
    {
hgs
parents:
diff changeset
  2769
    MCELOGGER_ENTERFN("CreateNewAccountL()");
hgs
parents:
diff changeset
  2770
    if ( aMessageType == KSenduiMtmSyncMLEmailUid )
hgs
parents:
diff changeset
  2771
    {
hgs
parents:
diff changeset
  2772
        aMessageType = KSenduiMtmSmtpUid;
hgs
parents:
diff changeset
  2773
    }
hgs
parents:
diff changeset
  2774
hgs
parents:
diff changeset
  2775
    iRootEntry->SetEntryL(KMsvRootIndexEntryIdValue);
hgs
parents:
diff changeset
  2776
hgs
parents:
diff changeset
  2777
    LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  2778
hgs
parents:
diff changeset
  2779
    TMsvEntry nentry;
hgs
parents:
diff changeset
  2780
    nentry.iMtm = aMessageType;
hgs
parents:
diff changeset
  2781
    nentry.iType.iUid = KUidMsvServiceEntryValue;
hgs
parents:
diff changeset
  2782
    nentry.iDate.HomeTime();
hgs
parents:
diff changeset
  2783
    nentry.iServiceId = aOldServiceId;
hgs
parents:
diff changeset
  2784
hgs
parents:
diff changeset
  2785
    // --- Get the MTM UI relevant to the message type ---
hgs
parents:
diff changeset
  2786
    CBaseMtmUi& mtmUi = iMtmStore->GetMtmUiLC( nentry.iMtm );
hgs
parents:
diff changeset
  2787
    CMsvEntry* centry = iSession->GetEntryL( KMsvRootIndexEntryId );
hgs
parents:
diff changeset
  2788
    CleanupStack::PushL( centry );
hgs
parents:
diff changeset
  2789
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  2790
hgs
parents:
diff changeset
  2791
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL(*this);
hgs
parents:
diff changeset
  2792
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  2793
hgs
parents:
diff changeset
  2794
    // Mailbox creation is ongoing, syncronic operation
hgs
parents:
diff changeset
  2795
    iMailboxCreationOn = ETrue;
hgs
parents:
diff changeset
  2796
    CMsvOperation* op = mtmUi.CreateL(
hgs
parents:
diff changeset
  2797
        nentry,
hgs
parents:
diff changeset
  2798
        *centry,
hgs
parents:
diff changeset
  2799
        singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  2800
    // Mailbox creation finalized
hgs
parents:
diff changeset
  2801
    iMailboxCreationOn = EFalse;
hgs
parents:
diff changeset
  2802
hgs
parents:
diff changeset
  2803
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  2804
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  2805
    CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  2806
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  2807
hgs
parents:
diff changeset
  2808
    TBool accountCreated = (op->iStatus != KErrCancel);
hgs
parents:
diff changeset
  2809
    // if not created, imum returns completed operation with KErrCancel
hgs
parents:
diff changeset
  2810
    if ( accountCreated )
hgs
parents:
diff changeset
  2811
				{
hgs
parents:
diff changeset
  2812
        iMceMainView->ListContainer()->ListItems()->HandleSessionEventL( EMsvEntriesCreated, NULL, NULL, NULL );
hgs
parents:
diff changeset
  2813
				}
hgs
parents:
diff changeset
  2814
hgs
parents:
diff changeset
  2815
    CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
  2816
    CleanupStack::PopAndDestroy( centry );
hgs
parents:
diff changeset
  2817
    CleanupStack::PopAndDestroy(); // mtm ui release
hgs
parents:
diff changeset
  2818
    MCELOGGER_LEAVEFN("CreateNewAccountL()");
hgs
parents:
diff changeset
  2819
    return accountCreated;
hgs
parents:
diff changeset
  2820
    }
hgs
parents:
diff changeset
  2821
hgs
parents:
diff changeset
  2822
// ----------------------------------------------------
hgs
parents:
diff changeset
  2823
// CMceUi::EditAccountL
hgs
parents:
diff changeset
  2824
// ----------------------------------------------------
hgs
parents:
diff changeset
  2825
void CMceUi::EditAccountL(TMsvId aId)
hgs
parents:
diff changeset
  2826
    {
hgs
parents:
diff changeset
  2827
hgs
parents:
diff changeset
  2828
    iRootEntry->SetEntryL(KMsvRootIndexEntryIdValue);
hgs
parents:
diff changeset
  2829
hgs
parents:
diff changeset
  2830
    LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  2831
hgs
parents:
diff changeset
  2832
    TMsvEntry entry;
hgs
parents:
diff changeset
  2833
hgs
parents:
diff changeset
  2834
    CMsvEntrySelection* rootSel = iRootEntry->ChildrenL();
hgs
parents:
diff changeset
  2835
    CleanupStack::PushL( rootSel );
hgs
parents:
diff changeset
  2836
    const TInt index = rootSel->Find( aId );
hgs
parents:
diff changeset
  2837
    if (index > KErrNotFound)
hgs
parents:
diff changeset
  2838
        {
hgs
parents:
diff changeset
  2839
        entry = (*iRootEntry)[index];
hgs
parents:
diff changeset
  2840
        EditMTMEntryL( entry );
hgs
parents:
diff changeset
  2841
        }
hgs
parents:
diff changeset
  2842
    CleanupStack::PopAndDestroy( rootSel );
hgs
parents:
diff changeset
  2843
    }
hgs
parents:
diff changeset
  2844
hgs
parents:
diff changeset
  2845
// ----------------------------------------------------
hgs
parents:
diff changeset
  2846
// CMceUi::MtmAccountsL
hgs
parents:
diff changeset
  2847
// ----------------------------------------------------
hgs
parents:
diff changeset
  2848
CUidNameArray* CMceUi::MtmAccountsL( TUid aType )
hgs
parents:
diff changeset
  2849
    {
hgs
parents:
diff changeset
  2850
hgs
parents:
diff changeset
  2851
    iRootEntry->SetEntryL(KMsvRootIndexEntryIdValue);
hgs
parents:
diff changeset
  2852
hgs
parents:
diff changeset
  2853
    CUidNameArray* accounts = new (ELeave) CUidNameArray(
hgs
parents:
diff changeset
  2854
        KMceArrayGranularity );
hgs
parents:
diff changeset
  2855
    CleanupStack::PushL( accounts );
hgs
parents:
diff changeset
  2856
hgs
parents:
diff changeset
  2857
    CMsvEntrySelection* sel = NULL;
hgs
parents:
diff changeset
  2858
hgs
parents:
diff changeset
  2859
    if ( aType == KSenduiMtmSmtpUid )
hgs
parents:
diff changeset
  2860
        {
hgs
parents:
diff changeset
  2861
        sel = MsvUiServiceUtilities::GetListOfAccountsL(
hgs
parents:
diff changeset
  2862
            *iSession,
hgs
parents:
diff changeset
  2863
            ETrue );
hgs
parents:
diff changeset
  2864
        }
hgs
parents:
diff changeset
  2865
    else
hgs
parents:
diff changeset
  2866
        {
hgs
parents:
diff changeset
  2867
        sel = MsvUiServiceUtilities::GetListOfAccountsWithMTML(
hgs
parents:
diff changeset
  2868
            *iSession,
hgs
parents:
diff changeset
  2869
            aType,
hgs
parents:
diff changeset
  2870
            ETrue );
hgs
parents:
diff changeset
  2871
        }
hgs
parents:
diff changeset
  2872
    CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  2873
hgs
parents:
diff changeset
  2874
    CMsvEntry* rootEntry = CMsvEntry::NewL(
hgs
parents:
diff changeset
  2875
        *iSession,
hgs
parents:
diff changeset
  2876
        KMsvRootIndexEntryId,
hgs
parents:
diff changeset
  2877
        TMsvSelectionOrdering(KMsvNoGrouping, EMsvSortByNone, ETrue));
hgs
parents:
diff changeset
  2878
    delete iRootEntry;
hgs
parents:
diff changeset
  2879
    iRootEntry = rootEntry;
hgs
parents:
diff changeset
  2880
hgs
parents:
diff changeset
  2881
    TUid uid;
hgs
parents:
diff changeset
  2882
    TUid techType = iUiRegistry->TechnologyTypeUid( aType );
hgs
parents:
diff changeset
  2883
    const TInt numAccounts = sel->Count();
hgs
parents:
diff changeset
  2884
    for (TInt cc=0; cc<numAccounts; cc++)
hgs
parents:
diff changeset
  2885
        {
hgs
parents:
diff changeset
  2886
        uid.iUid = sel->At(cc);
hgs
parents:
diff changeset
  2887
        TMsvEntry tentry;
hgs
parents:
diff changeset
  2888
        TRAPD( err, ( tentry = iRootEntry->ChildDataL( uid.iUid ) ) );
hgs
parents:
diff changeset
  2889
        if ( err == KErrNone &&
hgs
parents:
diff changeset
  2890
            iUiRegistry->IsPresent( tentry.iMtm ) && 
hgs
parents:
diff changeset
  2891
            iUiRegistry->TechnologyTypeUid( tentry.iMtm ) == techType )
hgs
parents:
diff changeset
  2892
            {
hgs
parents:
diff changeset
  2893
            const TInt count = accounts->Count();
hgs
parents:
diff changeset
  2894
            TBool foundService = EFalse;
hgs
parents:
diff changeset
  2895
            //check that related service is not already added to array
hgs
parents:
diff changeset
  2896
            for ( TInt loop = 0; loop < count; loop ++ )
hgs
parents:
diff changeset
  2897
                {
hgs
parents:
diff changeset
  2898
                if ( tentry.iRelatedId == (*accounts)[loop].iUid.iUid )
hgs
parents:
diff changeset
  2899
                    {
hgs
parents:
diff changeset
  2900
                    foundService = ETrue;
hgs
parents:
diff changeset
  2901
                    break;
hgs
parents:
diff changeset
  2902
                    }
hgs
parents:
diff changeset
  2903
                }
hgs
parents:
diff changeset
  2904
            if ( !foundService )
hgs
parents:
diff changeset
  2905
                {
hgs
parents:
diff changeset
  2906
                TUidNameInfo info( uid, tentry.iDetails.Left( KHumanReadableNameLength ) );
hgs
parents:
diff changeset
  2907
                MceUtils::ReplaceCharacters( info.iName );
hgs
parents:
diff changeset
  2908
                accounts->AppendL( info );
hgs
parents:
diff changeset
  2909
                }
hgs
parents:
diff changeset
  2910
            }
hgs
parents:
diff changeset
  2911
        }
hgs
parents:
diff changeset
  2912
    CleanupStack::PopAndDestroy( sel );
hgs
parents:
diff changeset
  2913
    CleanupStack::Pop( accounts );
hgs
parents:
diff changeset
  2914
    return accounts;
hgs
parents:
diff changeset
  2915
    }
hgs
parents:
diff changeset
  2916
hgs
parents:
diff changeset
  2917
// ----------------------------------------------------
hgs
parents:
diff changeset
  2918
// CMceUi::HandleDeleteL
hgs
parents:
diff changeset
  2919
// ----------------------------------------------------
hgs
parents:
diff changeset
  2920
void CMceUi::HandleDeleteL()
hgs
parents:
diff changeset
  2921
    {
hgs
parents:
diff changeset
  2922
    MCELOGGER_ENTERFN("HandleDeleteL()");
hgs
parents:
diff changeset
  2923
hgs
parents:
diff changeset
  2924
    __ASSERT_DEBUG( MceViewActive( EMceMessageViewActive ),
hgs
parents:
diff changeset
  2925
        Panic( EMceUiErrCannotDeleteFromMainView ) );
hgs
parents:
diff changeset
  2926
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  2927
        {
hgs
parents:
diff changeset
  2928
        return;
hgs
parents:
diff changeset
  2929
        }
hgs
parents:
diff changeset
  2930
hgs
parents:
diff changeset
  2931
    CMsvEntrySelection * selection = iMceListView->ListContainer()
hgs
parents:
diff changeset
  2932
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  2933
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  2934
    __ASSERT_DEBUG( selection->Count() > 0,
hgs
parents:
diff changeset
  2935
        Panic( EMceUiErrCannotDeleteFromMainView ) );
hgs
parents:
diff changeset
  2936
hgs
parents:
diff changeset
  2937
    if (  selection->Count() <= 0 )
hgs
parents:
diff changeset
  2938
        {
hgs
parents:
diff changeset
  2939
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  2940
        return;
hgs
parents:
diff changeset
  2941
        }
hgs
parents:
diff changeset
  2942
hgs
parents:
diff changeset
  2943
    iMceListView->ListContainer()->SetAnchorItemIdL(
hgs
parents:
diff changeset
  2944
        CMceMessageListContainerBase::EMessageListOperationDelete );
hgs
parents:
diff changeset
  2945
hgs
parents:
diff changeset
  2946
    const TMsvId id = selection->At(0);
hgs
parents:
diff changeset
  2947
    iEntry->SetEntryL(id);
hgs
parents:
diff changeset
  2948
    const TInt type = iEntry->Entry().iType.iUid;
hgs
parents:
diff changeset
  2949
hgs
parents:
diff changeset
  2950
    if ( IsMessageSendingL( id ) )
hgs
parents:
diff changeset
  2951
        {
hgs
parents:
diff changeset
  2952
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  2953
        return;
hgs
parents:
diff changeset
  2954
        }
hgs
parents:
diff changeset
  2955
hgs
parents:
diff changeset
  2956
    __ASSERT_DEBUG( type == KUidMsvMessageEntryValue || type == KUidMsvFolderEntryValue,
hgs
parents:
diff changeset
  2957
        Panic(EMceUiErrCannotDeleteServiceFromMainView) );
hgs
parents:
diff changeset
  2958
hgs
parents:
diff changeset
  2959
    TBool local = iEntry->OwningService() == KMsvLocalServiceIndexEntryIdValue;
hgs
parents:
diff changeset
  2960
hgs
parents:
diff changeset
  2961
    if ( iMMSNotifications )
hgs
parents:
diff changeset
  2962
        {
hgs
parents:
diff changeset
  2963
        delete iMMSNotifications;
hgs
parents:
diff changeset
  2964
        iMMSNotifications = NULL;
hgs
parents:
diff changeset
  2965
        }
hgs
parents:
diff changeset
  2966
hgs
parents:
diff changeset
  2967
    if ( local )
hgs
parents:
diff changeset
  2968
        {
hgs
parents:
diff changeset
  2969
        CAknQueryDialog* confDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  2970
        confDialog->PrepareLC( R_MCE_CONFIRMATION );
hgs
parents:
diff changeset
  2971
        // confDialog in CleanupStack now
hgs
parents:
diff changeset
  2972
        HBufC* titleText;
hgs
parents:
diff changeset
  2973
        if ( type == KUidMsvFolderEntryValue )
hgs
parents:
diff changeset
  2974
            {
hgs
parents:
diff changeset
  2975
            titleText = StringLoader::LoadLC( R_MCE_QUERY_COMMON_CONF_DELETE_FO,
hgs
parents:
diff changeset
  2976
                iEntry->Entry().iDetails.Left( iBitmapResolver->DescriptionLength() ), iEikonEnv );
hgs
parents:
diff changeset
  2977
            }
hgs
parents:
diff changeset
  2978
        else
hgs
parents:
diff changeset
  2979
            {
hgs
parents:
diff changeset
  2980
            if ( selection->Count() == 1 )
hgs
parents:
diff changeset
  2981
                {
hgs
parents:
diff changeset
  2982
                titleText = StringLoader::LoadLC(
hgs
parents:
diff changeset
  2983
                    R_MCE_QUERY_COMMON_CONF_DELETE_ME, iEikonEnv );
hgs
parents:
diff changeset
  2984
                }
hgs
parents:
diff changeset
  2985
            else
hgs
parents:
diff changeset
  2986
                {
hgs
parents:
diff changeset
  2987
                titleText = StringLoader::LoadLC(
hgs
parents:
diff changeset
  2988
                    R_MCE_QUERY_COMMON_CONF_DELETE_MS,
hgs
parents:
diff changeset
  2989
                    selection->Count(), iEikonEnv );
hgs
parents:
diff changeset
  2990
                }
hgs
parents:
diff changeset
  2991
            }
hgs
parents:
diff changeset
  2992
        confDialog->SetPromptL( *titleText );
hgs
parents:
diff changeset
  2993
        CleanupStack::PopAndDestroy( titleText );
hgs
parents:
diff changeset
  2994
        // RunLD removes confDialog from CleanupStack and deletes itself
hgs
parents:
diff changeset
  2995
        if ( !confDialog->RunLD() )
hgs
parents:
diff changeset
  2996
            {
hgs
parents:
diff changeset
  2997
            CleanupStack::PopAndDestroy( selection ); // selection
hgs
parents:
diff changeset
  2998
            return;
hgs
parents:
diff changeset
  2999
            }
hgs
parents:
diff changeset
  3000
        }
hgs
parents:
diff changeset
  3001
    
hgs
parents:
diff changeset
  3002
    if ( local && ( ( iEntry->Entry().Parent() == KMsvGlobalInBoxIndexEntryId ) ||
hgs
parents:
diff changeset
  3003
        ( iEntry->Entry().Parent() == KMsvGlobalOutBoxIndexEntryId ) ) ) 
hgs
parents:
diff changeset
  3004
        {
hgs
parents:
diff changeset
  3005
        CheckMMSNotificationsL( selection );
hgs
parents:
diff changeset
  3006
        if (  selection->Count() <= 0 )
hgs
parents:
diff changeset
  3007
            {
hgs
parents:
diff changeset
  3008
            // delete mms notifications, if any
hgs
parents:
diff changeset
  3009
            if ( iMMSNotifications->Count() > 0 )
hgs
parents:
diff changeset
  3010
                {
hgs
parents:
diff changeset
  3011
                //delete MMS notifications
hgs
parents:
diff changeset
  3012
                TBuf8<1> params;
hgs
parents:
diff changeset
  3013
                HandleMMSNotificationsDeleteL( params );
hgs
parents:
diff changeset
  3014
                }
hgs
parents:
diff changeset
  3015
            CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  3016
            return;
hgs
parents:
diff changeset
  3017
            }
hgs
parents:
diff changeset
  3018
        }
hgs
parents:
diff changeset
  3019
hgs
parents:
diff changeset
  3020
   
hgs
parents:
diff changeset
  3021
    iEntry->SetEntryL( iEntry->Entry().Parent() );
hgs
parents:
diff changeset
  3022
hgs
parents:
diff changeset
  3023
    CBaseMtmUi* ui = NULL;
hgs
parents:
diff changeset
  3024
    TUid mtm=iEntry->Entry().iMtm;
hgs
parents:
diff changeset
  3025
    if ( !local )
hgs
parents:
diff changeset
  3026
        {
hgs
parents:
diff changeset
  3027
        TRAPD(uiErr, (ui = &iMtmStore->ClaimMtmUiL( mtm )));
hgs
parents:
diff changeset
  3028
        if ( uiErr == KErrNotFound || uiErr == KErrNotSupported )
hgs
parents:
diff changeset
  3029
            {
hgs
parents:
diff changeset
  3030
            // MTM not present, so delete as normal local entry
hgs
parents:
diff changeset
  3031
            ui = NULL;
hgs
parents:
diff changeset
  3032
            }
hgs
parents:
diff changeset
  3033
        else
hgs
parents:
diff changeset
  3034
            {
hgs
parents:
diff changeset
  3035
            User::LeaveIfError(uiErr);
hgs
parents:
diff changeset
  3036
            }
hgs
parents:
diff changeset
  3037
        }
hgs
parents:
diff changeset
  3038
    if (ui)
hgs
parents:
diff changeset
  3039
        {
hgs
parents:
diff changeset
  3040
        CMtmStoreMtmReleaser::CleanupReleaseMtmUiLC(*iMtmStore, mtm);
hgs
parents:
diff changeset
  3041
        }
hgs
parents:
diff changeset
  3042
hgs
parents:
diff changeset
  3043
    CMsvOperation* op;
hgs
parents:
diff changeset
  3044
hgs
parents:
diff changeset
  3045
    if ( local )
hgs
parents:
diff changeset
  3046
        {
hgs
parents:
diff changeset
  3047
        __ASSERT_DEBUG( !iDeleteOperation,
hgs
parents:
diff changeset
  3048
            Panic( EMceUiErrAlreadyDeleting ) );
hgs
parents:
diff changeset
  3049
hgs
parents:
diff changeset
  3050
// Free disk space request for delete to be added
hgs
parents:
diff changeset
  3051
        }
hgs
parents:
diff changeset
  3052
hgs
parents:
diff changeset
  3053
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  3054
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  3055
hgs
parents:
diff changeset
  3056
    TBool resetSelection = ETrue;
hgs
parents:
diff changeset
  3057
hgs
parents:
diff changeset
  3058
    if (ui)
hgs
parents:
diff changeset
  3059
        {
hgs
parents:
diff changeset
  3060
        // reset ncn, if it is unread message
hgs
parents:
diff changeset
  3061
        TMsvEntry entry;
hgs
parents:
diff changeset
  3062
        TMsvId serviceId;
hgs
parents:
diff changeset
  3063
        User::LeaveIfError( iSession->GetEntry(selection->At(0),serviceId,entry) );
hgs
parents:
diff changeset
  3064
                
hgs
parents:
diff changeset
  3065
        if ( CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, 
hgs
parents:
diff changeset
  3066
                entry.iMtm )&& entry.Unread() )
hgs
parents:
diff changeset
  3067
            {
hgs
parents:
diff changeset
  3068
            HandleNotif(iMceListView->ListContainer()->FolderEntry().iServiceId);
hgs
parents:
diff changeset
  3069
hgs
parents:
diff changeset
  3070
            }
hgs
parents:
diff changeset
  3071
        
hgs
parents:
diff changeset
  3072
        ui->BaseMtm().SetCurrentEntryL(iSession->GetEntryL(
hgs
parents:
diff changeset
  3073
            iEntry->Entry().Id()));
hgs
parents:
diff changeset
  3074
hgs
parents:
diff changeset
  3075
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  3076
        op = ui->DeleteFromL(*selection, singleOpWatcher->iStatus);
hgs
parents:
diff changeset
  3077
        SetViewUpdateSuppressionFlag( ETrue, op );
hgs
parents:
diff changeset
  3078
        CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
  3079
        CleanupStack::PushL( op );
hgs
parents:
diff changeset
  3080
        // if cancel was pressed then completed operation is returned with
hgs
parents:
diff changeset
  3081
        // local service and status KErrCancel
hgs
parents:
diff changeset
  3082
        if ( op->Service() == KMsvLocalServiceIndexEntryId &&
hgs
parents:
diff changeset
  3083
             op->iStatus == KErrCancel )
hgs
parents:
diff changeset
  3084
            {
hgs
parents:
diff changeset
  3085
            resetSelection = EFalse;
hgs
parents:
diff changeset
  3086
            SetViewUpdateSuppressionFlag( EFalse, NULL );
hgs
parents:
diff changeset
  3087
            }
hgs
parents:
diff changeset
  3088
        }
hgs
parents:
diff changeset
  3089
    else
hgs
parents:
diff changeset
  3090
        {
hgs
parents:
diff changeset
  3091
        if ( iEntry->EntryId() == KMsvGlobalOutBoxIndexEntryId )
hgs
parents:
diff changeset
  3092
            {
hgs
parents:
diff changeset
  3093
            CMsvProgressReporterOperation* progOp =
hgs
parents:
diff changeset
  3094
                CMsvProgressReporterOperation::NewL(
hgs
parents:
diff changeset
  3095
                *iSession, singleOpWatcher->iStatus, EMbmAvkonQgn_note_erased );
hgs
parents:
diff changeset
  3096
            CleanupStack::PushL( progOp );
hgs
parents:
diff changeset
  3097
hgs
parents:
diff changeset
  3098
            CMsvOperation* subOp = CMceCancelSendingOperation::NewL(
hgs
parents:
diff changeset
  3099
                *iSession,
hgs
parents:
diff changeset
  3100
                progOp->RequestStatus(),
hgs
parents:
diff changeset
  3101
                selection->At(0),
hgs
parents:
diff changeset
  3102
                CMceCancelSendingOperation::ECancelAndDelete,
hgs
parents:
diff changeset
  3103
                *iMtmStore );
hgs
parents:
diff changeset
  3104
hgs
parents:
diff changeset
  3105
            progOp->SetOperationL(subOp); // this takes ownership immediately, so no cleanupstack needed.
hgs
parents:
diff changeset
  3106
hgs
parents:
diff changeset
  3107
            HBufC* text = StringLoader::LoadLC(
hgs
parents:
diff changeset
  3108
                R_MUIU_LOCAL_PROGRESS_DELETING_1,
hgs
parents:
diff changeset
  3109
                iEikonEnv );
hgs
parents:
diff changeset
  3110
            progOp->SetTitleL( *text );
hgs
parents:
diff changeset
  3111
            CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
  3112
            op = progOp;
hgs
parents:
diff changeset
  3113
            }
hgs
parents:
diff changeset
  3114
        else
hgs
parents:
diff changeset
  3115
            {
hgs
parents:
diff changeset
  3116
            // SMS and MMS deletion
hgs
parents:
diff changeset
  3117
            if ( selection->Count() > KMceProgressReporterThreshold ||
hgs
parents:
diff changeset
  3118
                 type == KUidMsvFolderEntryValue )
hgs
parents:
diff changeset
  3119
                {
hgs
parents:
diff changeset
  3120
                // Show the progress note
hgs
parents:
diff changeset
  3121
hgs
parents:
diff changeset
  3122
                CMsvProgressReporterOperation* progOp =
hgs
parents:
diff changeset
  3123
                    CMsvProgressReporterOperation::NewL(
hgs
parents:
diff changeset
  3124
                    *iSession, singleOpWatcher->iStatus, EMbmAvkonQgn_note_erased );
hgs
parents:
diff changeset
  3125
hgs
parents:
diff changeset
  3126
                CleanupStack::PushL( progOp );
hgs
parents:
diff changeset
  3127
hgs
parents:
diff changeset
  3128
                // deleting folder
hgs
parents:
diff changeset
  3129
                HBufC* text = NULL;
hgs
parents:
diff changeset
  3130
                iEntry->SetEntryL(id);
hgs
parents:
diff changeset
  3131
hgs
parents:
diff changeset
  3132
                if( type == KUidMsvFolderEntryValue )
hgs
parents:
diff changeset
  3133
                    {
hgs
parents:
diff changeset
  3134
                    text = StringLoader::LoadLC( R_MCE_WAIT_DELETE_FOLDER,
hgs
parents:
diff changeset
  3135
                        iEntry->Entry().iDetails.Left( iBitmapResolver->DescriptionLength() ),
hgs
parents:
diff changeset
  3136
                        iEikonEnv );
hgs
parents:
diff changeset
  3137
                    }
hgs
parents:
diff changeset
  3138
                else // if message
hgs
parents:
diff changeset
  3139
                    {
hgs
parents:
diff changeset
  3140
                    text = StringLoader::LoadLC(
hgs
parents:
diff changeset
  3141
                        R_MUIU_LOCAL_PROGRESS_DELETING_1,
hgs
parents:
diff changeset
  3142
                        iEikonEnv );
hgs
parents:
diff changeset
  3143
                    }
hgs
parents:
diff changeset
  3144
                progOp->SetTitleL( *text );
hgs
parents:
diff changeset
  3145
                CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
  3146
                iEntry->SetEntryL( iEntry->Entry().Parent() );
hgs
parents:
diff changeset
  3147
hgs
parents:
diff changeset
  3148
                CMsvOperation* subOp=iEntry->DeleteL(
hgs
parents:
diff changeset
  3149
                    *selection, progOp->RequestStatus() );
hgs
parents:
diff changeset
  3150
                progOp->SetOperationL(subOp); // this takes ownership immediately, so no cleanup stack needed.
hgs
parents:
diff changeset
  3151
                op = progOp;
hgs
parents:
diff changeset
  3152
                }
hgs
parents:
diff changeset
  3153
            else
hgs
parents:
diff changeset
  3154
                {
hgs
parents:
diff changeset
  3155
                // Do not show the progress note
hgs
parents:
diff changeset
  3156
                iEntry->SetEntryL(id);
hgs
parents:
diff changeset
  3157
                iEntry->SetEntryL( iEntry->Entry().Parent() );
hgs
parents:
diff changeset
  3158
                op = iEntry->DeleteL( *selection, singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  3159
                CleanupStack::PushL( op );
hgs
parents:
diff changeset
  3160
                }
hgs
parents:
diff changeset
  3161
            }
hgs
parents:
diff changeset
  3162
        }
hgs
parents:
diff changeset
  3163
hgs
parents:
diff changeset
  3164
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  3165
    CleanupStack::Pop( 2, singleOpWatcher ); // singleOpWatcher, op
hgs
parents:
diff changeset
  3166
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  3167
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  3168
hgs
parents:
diff changeset
  3169
    if ( ui )
hgs
parents:
diff changeset
  3170
        {
hgs
parents:
diff changeset
  3171
        CleanupStack::PopAndDestroy( );// release mtmUi
hgs
parents:
diff changeset
  3172
        }
hgs
parents:
diff changeset
  3173
    if ( local )
hgs
parents:
diff changeset
  3174
        {
hgs
parents:
diff changeset
  3175
        // if deleting from service, then it is mtm's responsibility to free disk...
hgs
parents:
diff changeset
  3176
        iDeleteOperation = singleOpWatcher;
hgs
parents:
diff changeset
  3177
        MCELOGGER_WRITE_FORMAT("free disk requested, iDeleteOperation set 0x%x", iDeleteOperation );
hgs
parents:
diff changeset
  3178
hgs
parents:
diff changeset
  3179
// Cancel the free disk space request to be added
hgs
parents:
diff changeset
  3180
        }
hgs
parents:
diff changeset
  3181
    CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  3182
    if ( resetSelection )
hgs
parents:
diff changeset
  3183
        {
hgs
parents:
diff changeset
  3184
        iMceListView->ListContainer()->ClearSelection();
hgs
parents:
diff changeset
  3185
        }
hgs
parents:
diff changeset
  3186
    iMsgDeletedStatus = ETrue;
hgs
parents:
diff changeset
  3187
    MCELOGGER_LEAVEFN("HandleDeleteL()");
hgs
parents:
diff changeset
  3188
    }
hgs
parents:
diff changeset
  3189
hgs
parents:
diff changeset
  3190
// ----------------------------------------------------
hgs
parents:
diff changeset
  3191
// CMceUi::HandleUndeleteL
hgs
parents:
diff changeset
  3192
// ----------------------------------------------------
hgs
parents:
diff changeset
  3193
void CMceUi::HandleUndeleteL()
hgs
parents:
diff changeset
  3194
    {
hgs
parents:
diff changeset
  3195
    MCELOGGER_ENTERFN("HandleUndeleteL()");
hgs
parents:
diff changeset
  3196
hgs
parents:
diff changeset
  3197
    __ASSERT_DEBUG( MceViewActive( EMceMessageViewActive ),
hgs
parents:
diff changeset
  3198
        Panic( EMceUiErrCannotUnDeleteFromMainView ) );
hgs
parents:
diff changeset
  3199
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  3200
        {
hgs
parents:
diff changeset
  3201
        return;
hgs
parents:
diff changeset
  3202
        }
hgs
parents:
diff changeset
  3203
hgs
parents:
diff changeset
  3204
    CMsvEntrySelection* selection = iMceListView->ListContainer()
hgs
parents:
diff changeset
  3205
        ->CurrentItemSelectionRefreshL();
hgs
parents:
diff changeset
  3206
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  3207
hgs
parents:
diff changeset
  3208
    const TInt count = selection->Count();
hgs
parents:
diff changeset
  3209
    __ASSERT_DEBUG( count != 0, Panic( EMceErrNothingToUnDelete ) );
hgs
parents:
diff changeset
  3210
    if ( count == 0 )
hgs
parents:
diff changeset
  3211
        {
hgs
parents:
diff changeset
  3212
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  3213
        return;
hgs
parents:
diff changeset
  3214
        }
hgs
parents:
diff changeset
  3215
hgs
parents:
diff changeset
  3216
    const TMsvId id = selection->At( 0 );
hgs
parents:
diff changeset
  3217
    TBool resetSelection = ETrue;
hgs
parents:
diff changeset
  3218
hgs
parents:
diff changeset
  3219
    TMsvEntry tentry;
hgs
parents:
diff changeset
  3220
    GetEntryL( id, tentry );
hgs
parents:
diff changeset
  3221
    TMsvEntry parentEntry;
hgs
parents:
diff changeset
  3222
    GetEntryL( tentry.Parent(), parentEntry );
hgs
parents:
diff changeset
  3223
hgs
parents:
diff changeset
  3224
    CBaseMtmUi& ui = iMtmStore->GetMtmUiAndSetContextLC( parentEntry );
hgs
parents:
diff changeset
  3225
hgs
parents:
diff changeset
  3226
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  3227
    CleanupStack::PushL(singleOpWatcher);
hgs
parents:
diff changeset
  3228
hgs
parents:
diff changeset
  3229
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  3230
    CMsvOperation* op = ui.UnDeleteFromL(*selection, singleOpWatcher->iStatus);
hgs
parents:
diff changeset
  3231
    CleanupStack::PopAndDestroy(); // CAknInputBlock::NewLC()
hgs
parents:
diff changeset
  3232
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  3233
    // if cancel was pressed then completed operation is returned with
hgs
parents:
diff changeset
  3234
    // local service and status KErrCancel
hgs
parents:
diff changeset
  3235
    if ( op->Service() == KMsvLocalServiceIndexEntryId &&
hgs
parents:
diff changeset
  3236
         op->iStatus == KErrCancel )
hgs
parents:
diff changeset
  3237
        {
hgs
parents:
diff changeset
  3238
        resetSelection = EFalse;
hgs
parents:
diff changeset
  3239
        }
hgs
parents:
diff changeset
  3240
hgs
parents:
diff changeset
  3241
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  3242
    CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  3243
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  3244
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  3245
hgs
parents:
diff changeset
  3246
    CleanupStack::PopAndDestroy( 2 );// release mtmUi, selection
hgs
parents:
diff changeset
  3247
    if ( resetSelection )
hgs
parents:
diff changeset
  3248
        {
hgs
parents:
diff changeset
  3249
        iMceListView->ListContainer()->ClearSelection();
hgs
parents:
diff changeset
  3250
        }
hgs
parents:
diff changeset
  3251
    MCELOGGER_LEAVEFN("HandleUndeleteL()");
hgs
parents:
diff changeset
  3252
    }
hgs
parents:
diff changeset
  3253
hgs
parents:
diff changeset
  3254
// ----------------------------------------------------
hgs
parents:
diff changeset
  3255
// CMceUi::MoveOrCopyEntriesL
hgs
parents:
diff changeset
  3256
// ----------------------------------------------------
hgs
parents:
diff changeset
  3257
void CMceUi::MoveOrCopyEntriesL( TBool aCopy )
hgs
parents:
diff changeset
  3258
    {
hgs
parents:
diff changeset
  3259
    TInt count;
hgs
parents:
diff changeset
  3260
    TMsvId id;
hgs
parents:
diff changeset
  3261
    TMsvId service;
hgs
parents:
diff changeset
  3262
    TMsvEntry tEntry;
hgs
parents:
diff changeset
  3263
    TBool mailMessage = EFalse;
hgs
parents:
diff changeset
  3264
    if ( aCopy )
hgs
parents:
diff changeset
  3265
        {
hgs
parents:
diff changeset
  3266
        LeaveIfDiskSpaceUnderCriticalLevelL( iDiskSpaceForMoveOrCopy );
hgs
parents:
diff changeset
  3267
        }
hgs
parents:
diff changeset
  3268
    else
hgs
parents:
diff changeset
  3269
        {
hgs
parents:
diff changeset
  3270
        LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  3271
        }
hgs
parents:
diff changeset
  3272
hgs
parents:
diff changeset
  3273
    __ASSERT_DEBUG( MceViewActive( EMceMessageViewActive ),
hgs
parents:
diff changeset
  3274
        Panic( EMceUiErrCannotMoveFromMainView ) );
hgs
parents:
diff changeset
  3275
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  3276
        {
hgs
parents:
diff changeset
  3277
        return;
hgs
parents:
diff changeset
  3278
        }
hgs
parents:
diff changeset
  3279
hgs
parents:
diff changeset
  3280
    const TMsvId sourceId = iMceListView->ListContainer()->CurrentFolderId();
hgs
parents:
diff changeset
  3281
hgs
parents:
diff changeset
  3282
    CMsvEntrySelection * selection = iMceListView->ListContainer()
hgs
parents:
diff changeset
  3283
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  3284
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  3285
hgs
parents:
diff changeset
  3286
    if ( !aCopy )
hgs
parents:
diff changeset
  3287
        {
hgs
parents:
diff changeset
  3288
        count = selection->Count();
hgs
parents:
diff changeset
  3289
        // MMS notifications cannot be moved
hgs
parents:
diff changeset
  3290
        for ( TInt cc = count; --cc >= 0; )
hgs
parents:
diff changeset
  3291
            {
hgs
parents:
diff changeset
  3292
            id = selection->At( cc );
hgs
parents:
diff changeset
  3293
            if ( iSession->GetEntry( id, service, tEntry ) == KErrNone  )
hgs
parents:
diff changeset
  3294
                {
hgs
parents:
diff changeset
  3295
                if ( tEntry.iMtm == KUidMsgMMSNotification )
hgs
parents:
diff changeset
  3296
                    {
hgs
parents:
diff changeset
  3297
                    selection->Delete( cc );
hgs
parents:
diff changeset
  3298
                    }
hgs
parents:
diff changeset
  3299
                }
hgs
parents:
diff changeset
  3300
            }
hgs
parents:
diff changeset
  3301
        if ( selection->Count() < count )
hgs
parents:
diff changeset
  3302
            {
hgs
parents:
diff changeset
  3303
            // MMS notifications have been deleted from selection
hgs
parents:
diff changeset
  3304
            CAknQueryDialog* note = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  3305
            HBufC* text = NULL;
hgs
parents:
diff changeset
  3306
            text = StringLoader::LoadLC( R_MMS_INFO_CANNOT_MOVE_NOTIF, CCoeEnv::Static() );
hgs
parents:
diff changeset
  3307
            note->SetPromptL( *text );
hgs
parents:
diff changeset
  3308
            CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
  3309
            note->ExecuteLD( R_MCE_MEMC_NOTE );
hgs
parents:
diff changeset
  3310
            }
hgs
parents:
diff changeset
  3311
        }
hgs
parents:
diff changeset
  3312
hgs
parents:
diff changeset
  3313
    // Email messages cannot be moved
hgs
parents:
diff changeset
  3314
    iMoveOrCopyMailOperation = -1;
hgs
parents:
diff changeset
  3315
    mailMessage = RemoveEmailMessagesFromSelection( selection );
hgs
parents:
diff changeset
  3316
hgs
parents:
diff changeset
  3317
    if (  selection->Count() <= 0 )
hgs
parents:
diff changeset
  3318
        {
hgs
parents:
diff changeset
  3319
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  3320
        if ( mailMessage )
hgs
parents:
diff changeset
  3321
            {
hgs
parents:
diff changeset
  3322
            InformationNoteCannotMoveCopyEMailL();
hgs
parents:
diff changeset
  3323
            }
hgs
parents:
diff changeset
  3324
        return;
hgs
parents:
diff changeset
  3325
        }
hgs
parents:
diff changeset
  3326
// Find an iAnchorId (=itemId) that should be focused after moving some items from the list
hgs
parents:
diff changeset
  3327
    iMceListView->ListContainer()->SetAnchorItemIdL(
hgs
parents:
diff changeset
  3328
        CMceMessageListContainerBase::EMessageListOperationGeneral );
hgs
parents:
diff changeset
  3329
hgs
parents:
diff changeset
  3330
    TMsvId destinationId = sourceId;
hgs
parents:
diff changeset
  3331
    const TInt titleResourceId = aCopy ?
hgs
parents:
diff changeset
  3332
        R_MCE_COPY_MESSAGES :
hgs
parents:
diff changeset
  3333
        R_MCE_MOVE_MESSAGES;
hgs
parents:
diff changeset
  3334
    HBufC* text =  StringLoader::LoadLC( titleResourceId, iEikonEnv );
hgs
parents:
diff changeset
  3335
hgs
parents:
diff changeset
  3336
    const TInt iconId = aCopy ?
hgs
parents:
diff changeset
  3337
        EMbmAvkonQgn_note_move :
hgs
parents:
diff changeset
  3338
        EMbmAvkonQgn_note_copy;
hgs
parents:
diff changeset
  3339
hgs
parents:
diff changeset
  3340
    if ( CMsgFolderSelectionDialog::SelectFolderL( destinationId, *text ) )
hgs
parents:
diff changeset
  3341
        {
hgs
parents:
diff changeset
  3342
        // Trap: NCNList cannot seperate New and Unread that comes to Inbox
hgs
parents:
diff changeset
  3343
        // So when movning Unread msgs to Inbox, we need to change them to
hgs
parents:
diff changeset
  3344
        // read, and then change them back after moving is completed
hgs
parents:
diff changeset
  3345
        if ( destinationId == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
  3346
            {
hgs
parents:
diff changeset
  3347
            HandleNewMsgToInboxL( ETrue, selection );
hgs
parents:
diff changeset
  3348
            }
hgs
parents:
diff changeset
  3349
hgs
parents:
diff changeset
  3350
        TMsvEntry srcEntry;
hgs
parents:
diff changeset
  3351
        const TBool sourceIsRemote = KMsvLocalServiceIndexEntryId != GetEntryL( sourceId, srcEntry);
hgs
parents:
diff changeset
  3352
hgs
parents:
diff changeset
  3353
        CMsvOperation* op=NULL;
hgs
parents:
diff changeset
  3354
hgs
parents:
diff changeset
  3355
        CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  3356
        CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  3357
hgs
parents:
diff changeset
  3358
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  3359
hgs
parents:
diff changeset
  3360
        TMsvId service = KMsvLocalServiceIndexEntryId;
hgs
parents:
diff changeset
  3361
        TMsvEntry sourceServiceEntry;
hgs
parents:
diff changeset
  3362
        User::LeaveIfError( iSession->GetEntry( srcEntry.iServiceId, service, sourceServiceEntry ) );
hgs
parents:
diff changeset
  3363
hgs
parents:
diff changeset
  3364
        if ( ( sourceIsRemote && !( sourceServiceEntry.Connected() ) ) ||
hgs
parents:
diff changeset
  3365
            ( sourceServiceEntry.iMtm == KSenduiMtmSyncMLEmailUid ) )
hgs
parents:
diff changeset
  3366
            {
hgs
parents:
diff changeset
  3367
            CBaseMtmUi& ui=iMtmStore->GetMtmUiAndSetContextLC( srcEntry );
hgs
parents:
diff changeset
  3368
            op=ui.CopyFromL( *selection, destinationId, singleOpWatcher->iStatus);
hgs
parents:
diff changeset
  3369
            CleanupStack::PopAndDestroy(); // release ui
hgs
parents:
diff changeset
  3370
            }
hgs
parents:
diff changeset
  3371
        else
hgs
parents:
diff changeset
  3372
            {
hgs
parents:
diff changeset
  3373
            CMsvProgressReporterOperation* progOp =
hgs
parents:
diff changeset
  3374
                CMsvProgressReporterOperation::NewL( *iSession, singleOpWatcher->iStatus, iconId );
hgs
parents:
diff changeset
  3375
            CleanupStack::PushL(progOp);
hgs
parents:
diff changeset
  3376
            CMsvOperation* subOp = NULL;
hgs
parents:
diff changeset
  3377
            iEntry->SetEntryL( sourceId );
hgs
parents:
diff changeset
  3378
hgs
parents:
diff changeset
  3379
            if ( aCopy )
hgs
parents:
diff changeset
  3380
                {
hgs
parents:
diff changeset
  3381
                subOp = iEntry->CopyL( *selection, destinationId, progOp->RequestStatus());
hgs
parents:
diff changeset
  3382
                }
hgs
parents:
diff changeset
  3383
            else
hgs
parents:
diff changeset
  3384
                {
hgs
parents:
diff changeset
  3385
                subOp = iEntry->MoveL( *selection, destinationId, progOp->RequestStatus());
hgs
parents:
diff changeset
  3386
                }
hgs
parents:
diff changeset
  3387
hgs
parents:
diff changeset
  3388
            progOp->SetOperationL( subOp ); // this takes ownership immediately, so no cleanupstack needed.
hgs
parents:
diff changeset
  3389
            op = progOp;
hgs
parents:
diff changeset
  3390
            CleanupStack::Pop( progOp ); 
hgs
parents:
diff changeset
  3391
            }
hgs
parents:
diff changeset
  3392
hgs
parents:
diff changeset
  3393
        CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
  3394
        CleanupStack::PushL( op );
hgs
parents:
diff changeset
  3395
        iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  3396
        CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  3397
        singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  3398
        MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  3399
hgs
parents:
diff changeset
  3400
        if ( mailMessage )
hgs
parents:
diff changeset
  3401
            {
hgs
parents:
diff changeset
  3402
            // Mail messages cannot be copied or moved, save the command ID
hgs
parents:
diff changeset
  3403
            iMoveOrCopyMailOperation = op->Id();
hgs
parents:
diff changeset
  3404
            }
hgs
parents:
diff changeset
  3405
hgs
parents:
diff changeset
  3406
        iMceListView->ListContainer()->ClearSelection();
hgs
parents:
diff changeset
  3407
hgs
parents:
diff changeset
  3408
        } // end if
hgs
parents:
diff changeset
  3409
    CleanupStack::PopAndDestroy( 2 ); // text, selection
hgs
parents:
diff changeset
  3410
    }
hgs
parents:
diff changeset
  3411
hgs
parents:
diff changeset
  3412
// ----------------------------------------------------
hgs
parents:
diff changeset
  3413
// CMceUi::ActivateLocalViewL
hgs
parents:
diff changeset
  3414
// ----------------------------------------------------
hgs
parents:
diff changeset
  3415
void CMceUi::ActivateLocalViewL(TUid aViewId)
hgs
parents:
diff changeset
  3416
    {
hgs
parents:
diff changeset
  3417
    if ( aViewId == KMceMainViewListViewId )
hgs
parents:
diff changeset
  3418
        {
hgs
parents:
diff changeset
  3419
        iEditorOperation = NULL;
hgs
parents:
diff changeset
  3420
        CAknTitlePane* title=TitlePaneL();
hgs
parents:
diff changeset
  3421
        HBufC* text = StringLoader::LoadLC( R_MCE_MAIN_VIEW_TITLE, iEikonEnv );
hgs
parents:
diff changeset
  3422
        title->SetTextL( *text );
hgs
parents:
diff changeset
  3423
        CleanupStack::PopAndDestroy(); // text
hgs
parents:
diff changeset
  3424
        }
hgs
parents:
diff changeset
  3425
    CAknViewAppUi::ActivateLocalViewL( aViewId );
hgs
parents:
diff changeset
  3426
    }
hgs
parents:
diff changeset
  3427
hgs
parents:
diff changeset
  3428
// ----------------------------------------------------
hgs
parents:
diff changeset
  3429
// CMceUi::CreateTabsL
hgs
parents:
diff changeset
  3430
// ----------------------------------------------------
hgs
parents:
diff changeset
  3431
void CMceUi::CreateTabsL()
hgs
parents:
diff changeset
  3432
    {
hgs
parents:
diff changeset
  3433
    MCELOGGER_ENTERFN("CreateTabsL()");
hgs
parents:
diff changeset
  3434
    __ASSERT_DEBUG( !iTabsArray, Panic( EMceUiErrTabsArrayAlreadyExists ) );
hgs
parents:
diff changeset
  3435
hgs
parents:
diff changeset
  3436
    delete iDecoratedTabGroup;
hgs
parents:
diff changeset
  3437
    iDecoratedTabGroup = NULL;
hgs
parents:
diff changeset
  3438
    iDecoratedTabGroup = iNaviPane->CreateTabGroupL( this );
hgs
parents:
diff changeset
  3439
    iDecoratedTabGroup->SetControlType( CAknNavigationDecorator::ETabGroup );
hgs
parents:
diff changeset
  3440
hgs
parents:
diff changeset
  3441
    CAknTabGroup* tabGroup = ( CAknTabGroup* ) iDecoratedTabGroup->DecoratedControl();
hgs
parents:
diff changeset
  3442
hgs
parents:
diff changeset
  3443
    CMceMainViewListItemArray* array = iMceMainView->ListContainer()->ListItems();
hgs
parents:
diff changeset
  3444
    TInt count = array->Count();
hgs
parents:
diff changeset
  3445
    CMsvEntrySelection* tabsArray = new( ELeave ) CMsvEntrySelection();
hgs
parents:
diff changeset
  3446
    CleanupStack::PushL( tabsArray );
hgs
parents:
diff changeset
  3447
    TInt loop = 0;
hgs
parents:
diff changeset
  3448
    for ( loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
  3449
        {
hgs
parents:
diff changeset
  3450
        const TMceListItem& listItem = (*array)[loop];
hgs
parents:
diff changeset
  3451
        if ( !listItem.iExtraItem || listItem.iMsvId == KMceDeliveryReportsListIdValue )
hgs
parents:
diff changeset
  3452
            {
hgs
parents:
diff changeset
  3453
              if (( iEmailClientIntegration )&&(!iEmailFramework))
hgs
parents:
diff changeset
  3454
              {
hgs
parents:
diff changeset
  3455
                TMsvId service;
hgs
parents:
diff changeset
  3456
                TMsvEntry entry;
hgs
parents:
diff changeset
  3457
                     
hgs
parents:
diff changeset
  3458
                  
hgs
parents:
diff changeset
  3459
                CRepository* repository = NULL;
hgs
parents:
diff changeset
  3460
                TInt mtmPluginID = 0;
hgs
parents:
diff changeset
  3461
                TRAPD( ret, repository = CRepository::NewL(
hgs
parents:
diff changeset
  3462
                                         KCRUidSelectableDefaultEmailSettings ) );
hgs
parents:
diff changeset
  3463
                
hgs
parents:
diff changeset
  3464
                if ( ret == KErrNone )
hgs
parents:
diff changeset
  3465
                    {
hgs
parents:
diff changeset
  3466
                    // Get Email application mtm plugin ID
hgs
parents:
diff changeset
  3467
                    repository->Get( KIntegratedEmailAppMtmPluginId, mtmPluginID );
hgs
parents:
diff changeset
  3468
                    }
hgs
parents:
diff changeset
  3469
                delete repository;
hgs
parents:
diff changeset
  3470
                if ( iSession->GetEntry(listItem.iMsvId, service, entry) == KErrNone
hgs
parents:
diff changeset
  3471
                                                    &&  entry.iMtm.iUid != mtmPluginID)
hgs
parents:
diff changeset
  3472
                 {
hgs
parents:
diff changeset
  3473
                 tabsArray->AppendL( listItem.iMsvId );
hgs
parents:
diff changeset
  3474
                 }
hgs
parents:
diff changeset
  3475
				else if(listItem.iMsvId == KMceDeliveryReportsListIdValue)
hgs
parents:
diff changeset
  3476
                 {
hgs
parents:
diff changeset
  3477
                 	tabsArray->AppendL( listItem.iMsvId );
hgs
parents:
diff changeset
  3478
                 }
hgs
parents:
diff changeset
  3479
               }
hgs
parents:
diff changeset
  3480
               else
hgs
parents:
diff changeset
  3481
               {
hgs
parents:
diff changeset
  3482
                 tabsArray->AppendL( listItem.iMsvId );
hgs
parents:
diff changeset
  3483
               }
hgs
parents:
diff changeset
  3484
            
hgs
parents:
diff changeset
  3485
            }
hgs
parents:
diff changeset
  3486
        }
hgs
parents:
diff changeset
  3487
    CleanupStack::Pop( tabsArray );
hgs
parents:
diff changeset
  3488
    iTabsArray = tabsArray;
hgs
parents:
diff changeset
  3489
hgs
parents:
diff changeset
  3490
    CFbsBitmap* bitmap;
hgs
parents:
diff changeset
  3491
    CFbsBitmap* bitmapMask;
hgs
parents:
diff changeset
  3492
hgs
parents:
diff changeset
  3493
    TAknsItemID id;
hgs
parents:
diff changeset
  3494
    id.iMajor = 0;
hgs
parents:
diff changeset
  3495
    id.iMinor = 0;
hgs
parents:
diff changeset
  3496
hgs
parents:
diff changeset
  3497
    MAknsSkinInstance* skins = AknsUtils::SkinInstance();
hgs
parents:
diff changeset
  3498
hgs
parents:
diff changeset
  3499
    count = iTabsArray->Count();
hgs
parents:
diff changeset
  3500
    TInt bitmapIndex = EMbmMuiuQgn_prop_mce_inbox_tab4;
hgs
parents:
diff changeset
  3501
    for ( loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
  3502
        {
hgs
parents:
diff changeset
  3503
        switch ( (*iTabsArray)[loop] )
hgs
parents:
diff changeset
  3504
            {
hgs
parents:
diff changeset
  3505
            case KMsvGlobalInBoxIndexEntryId:
hgs
parents:
diff changeset
  3506
                bitmapIndex = EMbmMuiuQgn_prop_mce_inbox_tab4;
hgs
parents:
diff changeset
  3507
                id = KAknsIIDQgnPropMceInboxTab4;
hgs
parents:
diff changeset
  3508
                break;
hgs
parents:
diff changeset
  3509
            case KMceDocumentsEntryId:
hgs
parents:
diff changeset
  3510
                bitmapIndex = EMbmMuiuQgn_prop_mce_doc_tab4;
hgs
parents:
diff changeset
  3511
                id = KAknsIIDQgnPropMceDocTab4;
hgs
parents:
diff changeset
  3512
                break;
hgs
parents:
diff changeset
  3513
            case KMsvDraftEntryId:
hgs
parents:
diff changeset
  3514
                bitmapIndex = EMbmMuiuQgn_prop_mce_drafts_tab4;
hgs
parents:
diff changeset
  3515
                id = KAknsIIDQgnPropMceDraftsTab4;
hgs
parents:
diff changeset
  3516
                break;
hgs
parents:
diff changeset
  3517
            case KMsvSentEntryId:
hgs
parents:
diff changeset
  3518
                bitmapIndex = EMbmMuiuQgn_prop_mce_sent_tab4;
hgs
parents:
diff changeset
  3519
                id = KAknsIIDQgnPropMceSentTab4;
hgs
parents:
diff changeset
  3520
                break;
hgs
parents:
diff changeset
  3521
            case KMsvGlobalOutBoxIndexEntryId:
hgs
parents:
diff changeset
  3522
                bitmapIndex = EMbmMuiuQgn_prop_mce_outbox_tab4;
hgs
parents:
diff changeset
  3523
                id = KAknsIIDQgnPropMceOutboxTab4;
hgs
parents:
diff changeset
  3524
                break;
hgs
parents:
diff changeset
  3525
            case KMceDeliveryReportsListIdValue:
hgs
parents:
diff changeset
  3526
                bitmapIndex = EMbmMuiuQgn_prop_mce_dr_tab4;
hgs
parents:
diff changeset
  3527
                id = KAknsIIDQgnPropMceDrTab4;
hgs
parents:
diff changeset
  3528
                break;
hgs
parents:
diff changeset
  3529
            default:
hgs
parents:
diff changeset
  3530
                {
hgs
parents:
diff changeset
  3531
                TMsvId service;
hgs
parents:
diff changeset
  3532
                TMsvEntry entry;
hgs
parents:
diff changeset
  3533
                if ( iSession->GetEntry( (*iTabsArray)[loop], service, entry) == KErrNone
hgs
parents:
diff changeset
  3534
                    && ( entry.iMtm == KSenduiMtmImap4Uid || entry.iMtm == KSenduiMtmPop3Uid )
hgs
parents:
diff changeset
  3535
                    && entry.Connected() )
hgs
parents:
diff changeset
  3536
                    {
hgs
parents:
diff changeset
  3537
                    bitmapIndex = EMbmMuiuQgn_prop_mce_remote_on_tab4;
hgs
parents:
diff changeset
  3538
                    id = KAknsIIDQgnPropMceRemoteOnTab4;
hgs
parents:
diff changeset
  3539
                    }
hgs
parents:
diff changeset
  3540
                else
hgs
parents:
diff changeset
  3541
                    {
hgs
parents:
diff changeset
  3542
                    bitmapIndex = EMbmMuiuQgn_prop_mce_remote_tab4;
hgs
parents:
diff changeset
  3543
                    id = KAknsIIDQgnPropMceRemoteTab4;
hgs
parents:
diff changeset
  3544
                    }
hgs
parents:
diff changeset
  3545
                }
hgs
parents:
diff changeset
  3546
                break;
hgs
parents:
diff changeset
  3547
            }
hgs
parents:
diff changeset
  3548
hgs
parents:
diff changeset
  3549
        AknsUtils::CreateIconL( skins, id, bitmap,
hgs
parents:
diff changeset
  3550
           bitmapMask, iFilename, bitmapIndex,
hgs
parents:
diff changeset
  3551
           bitmapIndex + 1 );
hgs
parents:
diff changeset
  3552
hgs
parents:
diff changeset
  3553
        tabGroup->AddTabL(
hgs
parents:
diff changeset
  3554
            loop, bitmap, bitmapMask );
hgs
parents:
diff changeset
  3555
        }
hgs
parents:
diff changeset
  3556
hgs
parents:
diff changeset
  3557
    tabGroup->SetTabFixedWidthL(KTabWidthWithFourTabs);
hgs
parents:
diff changeset
  3558
hgs
parents:
diff changeset
  3559
    MCELOGGER_LEAVEFN("CreateTabsL()");
hgs
parents:
diff changeset
  3560
    }
hgs
parents:
diff changeset
  3561
hgs
parents:
diff changeset
  3562
// ----------------------------------------------------
hgs
parents:
diff changeset
  3563
// CMceUi::CheckRemoteMailboxTabIconsL
hgs
parents:
diff changeset
  3564
// ----------------------------------------------------
hgs
parents:
diff changeset
  3565
void CMceUi::CheckRemoteMailboxTabIconsL()
hgs
parents:
diff changeset
  3566
    {
hgs
parents:
diff changeset
  3567
    MCELOGGER_ENTERFN("CheckRemoteMailboxTabIconsL()");
hgs
parents:
diff changeset
  3568
    __ASSERT_DEBUG( iMceUiFlags.MceFlag( EMceUiFlagsTabsActive ),
hgs
parents:
diff changeset
  3569
        Panic( EMceUiErrTabsNotActivated ) );
hgs
parents:
diff changeset
  3570
    __ASSERT_DEBUG( iTabsArray, Panic( EMceUiErrTabsArrayDoesNotAlreadyExist ) );
hgs
parents:
diff changeset
  3571
    CAknTabGroup* tabGroup = ( CAknTabGroup* ) iDecoratedTabGroup->DecoratedControl();
hgs
parents:
diff changeset
  3572
    const TInt count = iTabsArray->Count();
hgs
parents:
diff changeset
  3573
    for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
  3574
        {
hgs
parents:
diff changeset
  3575
        TMsvId service;
hgs
parents:
diff changeset
  3576
        TMsvEntry entry;
hgs
parents:
diff changeset
  3577
        if ( iSession->GetEntry( (*iTabsArray)[loop], service, entry) == KErrNone  )
hgs
parents:
diff changeset
  3578
            {
hgs
parents:
diff changeset
  3579
            TInt bitmapIndex = KErrNotFound;
hgs
parents:
diff changeset
  3580
            TAknsItemID id;
hgs
parents:
diff changeset
  3581
            id.iMajor = 0;
hgs
parents:
diff changeset
  3582
            id.iMinor = 0;
hgs
parents:
diff changeset
  3583
            if ( ( entry.iMtm == KSenduiMtmImap4Uid
hgs
parents:
diff changeset
  3584
            || entry.iMtm == KSenduiMtmPop3Uid ) )
hgs
parents:
diff changeset
  3585
            {
hgs
parents:
diff changeset
  3586
                bitmapIndex = entry.Connected() ?
hgs
parents:
diff changeset
  3587
                EMbmMuiuQgn_prop_mce_remote_on_tab4 : EMbmMuiuQgn_prop_mce_remote_tab4;
hgs
parents:
diff changeset
  3588
                id = entry.Connected() ?
hgs
parents:
diff changeset
  3589
                    KAknsIIDQgnPropMceRemoteOnTab4 : KAknsIIDQgnPropMceRemoteTab4;
hgs
parents:
diff changeset
  3590
                }
hgs
parents:
diff changeset
  3591
            else if ( entry.iMtm == KSenduiMtmSyncMLEmailUid )
hgs
parents:
diff changeset
  3592
                {
hgs
parents:
diff changeset
  3593
                bitmapIndex = EMbmMuiuQgn_prop_sml_remote_tab4;
hgs
parents:
diff changeset
  3594
                id = KAknsIIDQgnPropSmlRemoteTab4;
hgs
parents:
diff changeset
  3595
                }
hgs
parents:
diff changeset
  3596
hgs
parents:
diff changeset
  3597
            if ( bitmapIndex > KErrNotFound )
hgs
parents:
diff changeset
  3598
                {
hgs
parents:
diff changeset
  3599
                MAknsSkinInstance* skins = AknsUtils::SkinInstance();
hgs
parents:
diff changeset
  3600
                CFbsBitmap* bitmap;
hgs
parents:
diff changeset
  3601
                CFbsBitmap* bitmapMask;
hgs
parents:
diff changeset
  3602
hgs
parents:
diff changeset
  3603
                AknsUtils::CreateIconL( skins, id, bitmap,
hgs
parents:
diff changeset
  3604
                    bitmapMask, iFilename, bitmapIndex, bitmapIndex + 1 );
hgs
parents:
diff changeset
  3605
hgs
parents:
diff changeset
  3606
                tabGroup->ReplaceTabL(
hgs
parents:
diff changeset
  3607
                    loop, bitmap, bitmapMask );
hgs
parents:
diff changeset
  3608
                }
hgs
parents:
diff changeset
  3609
            }
hgs
parents:
diff changeset
  3610
        }
hgs
parents:
diff changeset
  3611
hgs
parents:
diff changeset
  3612
    MCELOGGER_LEAVEFN("CheckRemoteMailboxTabIconsL()");
hgs
parents:
diff changeset
  3613
    }
hgs
parents:
diff changeset
  3614
hgs
parents:
diff changeset
  3615
// ----------------------------------------------------
hgs
parents:
diff changeset
  3616
// CMceUi::ShowTabsL
hgs
parents:
diff changeset
  3617
// ----------------------------------------------------
hgs
parents:
diff changeset
  3618
void CMceUi::ShowTabsL( TMsvId aOpenedId, TBool aOpeningDeliveryReports /* = EFalse */ )
hgs
parents:
diff changeset
  3619
    {
hgs
parents:
diff changeset
  3620
    MCELOGGER_ENTERFN("ShowTabsL()");
hgs
parents:
diff changeset
  3621
hgs
parents:
diff changeset
  3622
    if ( !iDecoratedTabGroup )
hgs
parents:
diff changeset
  3623
        {
hgs
parents:
diff changeset
  3624
        CreateTabsL();
hgs
parents:
diff changeset
  3625
        }
hgs
parents:
diff changeset
  3626
hgs
parents:
diff changeset
  3627
    TInt selectedIndex;
hgs
parents:
diff changeset
  3628
    if ( aOpeningDeliveryReports )
hgs
parents:
diff changeset
  3629
        {
hgs
parents:
diff changeset
  3630
        selectedIndex = iTabsArray->Find( KMceDeliveryReportsListIdValue );
hgs
parents:
diff changeset
  3631
        }
hgs
parents:
diff changeset
  3632
    else
hgs
parents:
diff changeset
  3633
        {
hgs
parents:
diff changeset
  3634
        selectedIndex = iTabsArray->Find( aOpenedId );
hgs
parents:
diff changeset
  3635
        }
hgs
parents:
diff changeset
  3636
hgs
parents:
diff changeset
  3637
    CAknTabGroup* tabGroup = ( CAknTabGroup* ) iDecoratedTabGroup->DecoratedControl();
hgs
parents:
diff changeset
  3638
    tabGroup->SetActiveTabByIndex( selectedIndex );
hgs
parents:
diff changeset
  3639
    iNaviPane->PushL(*iDecoratedTabGroup);
hgs
parents:
diff changeset
  3640
    iMceUiFlags.SetMceFlag( EMceUiFlagsTabsActive );
hgs
parents:
diff changeset
  3641
    CheckRemoteMailboxTabIconsL();
hgs
parents:
diff changeset
  3642
    MCELOGGER_LEAVEFN("ShowTabsL()");
hgs
parents:
diff changeset
  3643
    }
hgs
parents:
diff changeset
  3644
hgs
parents:
diff changeset
  3645
// ----------------------------------------------------
hgs
parents:
diff changeset
  3646
// CMceUi::RemoveTabs
hgs
parents:
diff changeset
  3647
// ----------------------------------------------------
hgs
parents:
diff changeset
  3648
void CMceUi::RemoveTabs()
hgs
parents:
diff changeset
  3649
    {
hgs
parents:
diff changeset
  3650
    MCELOGGER_ENTERFN("RemoveTabs()");
hgs
parents:
diff changeset
  3651
    if ( iMceUiFlags.MceFlag( EMceUiFlagsTabsActive ) )
hgs
parents:
diff changeset
  3652
        {
hgs
parents:
diff changeset
  3653
        iNaviPane->Pop();
hgs
parents:
diff changeset
  3654
        iMceUiFlags.ClearMceFlag( EMceUiFlagsTabsActive );
hgs
parents:
diff changeset
  3655
        }
hgs
parents:
diff changeset
  3656
    MCELOGGER_LEAVEFN("RemoveTabs()");
hgs
parents:
diff changeset
  3657
    }
hgs
parents:
diff changeset
  3658
hgs
parents:
diff changeset
  3659
// ----------------------------------------------------
hgs
parents:
diff changeset
  3660
// CMceUi::RemoveTabsAndUpdateArray
hgs
parents:
diff changeset
  3661
// ----------------------------------------------------
hgs
parents:
diff changeset
  3662
void CMceUi::RemoveTabsAndUpdateArray()
hgs
parents:
diff changeset
  3663
    {
hgs
parents:
diff changeset
  3664
    MCELOGGER_ENTERFN("RemoveTabsAndUpdateArray()");
hgs
parents:
diff changeset
  3665
    TBool tabsActive = iMceUiFlags.MceFlag( EMceUiFlagsTabsActive );
hgs
parents:
diff changeset
  3666
    RemoveTabs();
hgs
parents:
diff changeset
  3667
    delete iDecoratedTabGroup;
hgs
parents:
diff changeset
  3668
    iDecoratedTabGroup = NULL;
hgs
parents:
diff changeset
  3669
    delete iTabsArray;
hgs
parents:
diff changeset
  3670
    iTabsArray = NULL;
hgs
parents:
diff changeset
  3671
    
hgs
parents:
diff changeset
  3672
    if ( tabsActive && MceViewActive( EMceMessageViewActive ) && iMceListView )
hgs
parents:
diff changeset
  3673
        {
hgs
parents:
diff changeset
  3674
        TRAP_IGNORE( ShowTabsL( iMceListView->ListContainer()->CurrentFolderId() ) );
hgs
parents:
diff changeset
  3675
        }
hgs
parents:
diff changeset
  3676
    MCELOGGER_LEAVEFN("RemoveTabsAndUpdateArray()");
hgs
parents:
diff changeset
  3677
    }
hgs
parents:
diff changeset
  3678
hgs
parents:
diff changeset
  3679
// ----------------------------------------------------
hgs
parents:
diff changeset
  3680
// CMceUi::CheckIAUpdate
hgs
parents:
diff changeset
  3681
// ----------------------------------------------------
hgs
parents:
diff changeset
  3682
void CMceUi::CheckIAUpdate()
hgs
parents:
diff changeset
  3683
    {
hgs
parents:
diff changeset
  3684
    TRAP_IGNORE(iMceIAUpdate->StartL( TUid::Uid( KMceApplicationUidValue ) ));
hgs
parents:
diff changeset
  3685
    }
hgs
parents:
diff changeset
  3686
hgs
parents:
diff changeset
  3687
// ----------------------------------------------------
hgs
parents:
diff changeset
  3688
// CMceUi::GoOnlineWithQueryL
hgs
parents:
diff changeset
  3689
// ----------------------------------------------------
hgs
parents:
diff changeset
  3690
void CMceUi::GoOnlineWithQueryL( TMsvId aAccount )
hgs
parents:
diff changeset
  3691
    {
hgs
parents:
diff changeset
  3692
    if ( AlwaysOnlineLastConnectionL( aAccount ) )
hgs
parents:
diff changeset
  3693
        {
hgs
parents:
diff changeset
  3694
        CAknQueryDialog* confDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  3695
        if ( confDialog->ExecuteLD( R_MCE_GO_ONLINE_CONFIRMATION ) )
hgs
parents:
diff changeset
  3696
            {
hgs
parents:
diff changeset
  3697
            ChangeServiceConnectionStateL( aAccount, ETrue);
hgs
parents:
diff changeset
  3698
            }
hgs
parents:
diff changeset
  3699
        }
hgs
parents:
diff changeset
  3700
    }
hgs
parents:
diff changeset
  3701
hgs
parents:
diff changeset
  3702
// ----------------------------------------------------
hgs
parents:
diff changeset
  3703
// CMceUi::GoOnlineL
hgs
parents:
diff changeset
  3704
// ----------------------------------------------------
hgs
parents:
diff changeset
  3705
void CMceUi::GoOnlineL( TMsvId aAccount )
hgs
parents:
diff changeset
  3706
    {
hgs
parents:
diff changeset
  3707
    MCELOGGER_ENTERFN("GoOnlineL()");
hgs
parents:
diff changeset
  3708
    ChangeServiceConnectionStateL( aAccount, ETrue);
hgs
parents:
diff changeset
  3709
    MCELOGGER_LEAVEFN("GoOnlineL()");
hgs
parents:
diff changeset
  3710
    }
hgs
parents:
diff changeset
  3711
hgs
parents:
diff changeset
  3712
// ----------------------------------------------------
hgs
parents:
diff changeset
  3713
// CMceUi::CloseConnectionWithListQueryL
hgs
parents:
diff changeset
  3714
// ----------------------------------------------------
hgs
parents:
diff changeset
  3715
void CMceUi::CloseConnectionWithListQueryL()
hgs
parents:
diff changeset
  3716
    {
hgs
parents:
diff changeset
  3717
    CMsvEntrySelection* connectedAccounts = ConnectedServicesLC();
hgs
parents:
diff changeset
  3718
    const TInt numberOfConnectedMailboxes = connectedAccounts->Count();
hgs
parents:
diff changeset
  3719
    TInt closeConnection = KErrNotFound;
hgs
parents:
diff changeset
  3720
hgs
parents:
diff changeset
  3721
    if ( numberOfConnectedMailboxes > 0 )
hgs
parents:
diff changeset
  3722
        {
hgs
parents:
diff changeset
  3723
        if ( numberOfConnectedMailboxes == 1 )
hgs
parents:
diff changeset
  3724
            {
hgs
parents:
diff changeset
  3725
            closeConnection = 0;
hgs
parents:
diff changeset
  3726
            }
hgs
parents:
diff changeset
  3727
        else
hgs
parents:
diff changeset
  3728
            {
hgs
parents:
diff changeset
  3729
            CDesCArrayFlat* items = new(ELeave)CDesCArrayFlat( KMceArrayGranularity );
hgs
parents:
diff changeset
  3730
            CleanupStack::PushL( items );
hgs
parents:
diff changeset
  3731
            for (TInt loop = 0; loop < numberOfConnectedMailboxes; loop++)
hgs
parents:
diff changeset
  3732
                {
hgs
parents:
diff changeset
  3733
                const TMsvEntry& tentry=iRootEntry->ChildDataL( connectedAccounts->At( loop ) );
hgs
parents:
diff changeset
  3734
                items->AppendL( tentry.iDetails.Left( iBitmapResolver->DescriptionLength() ) );
hgs
parents:
diff changeset
  3735
                }
hgs
parents:
diff changeset
  3736
hgs
parents:
diff changeset
  3737
            CAknListQueryDialog* dlg = new (ELeave) CAknListQueryDialog(&closeConnection);
hgs
parents:
diff changeset
  3738
            dlg->PrepareLC( R_MCE_LIST_QUERY );
hgs
parents:
diff changeset
  3739
            dlg->SetItemTextArray( items );
hgs
parents:
diff changeset
  3740
            dlg->SetOwnershipType( ELbmDoesNotOwnItemArray );
hgs
parents:
diff changeset
  3741
            if( !dlg->RunLD() )
hgs
parents:
diff changeset
  3742
                {
hgs
parents:
diff changeset
  3743
                closeConnection = KErrNotFound;
hgs
parents:
diff changeset
  3744
                }
hgs
parents:
diff changeset
  3745
            CleanupStack::PopAndDestroy( items );
hgs
parents:
diff changeset
  3746
            }
hgs
parents:
diff changeset
  3747
hgs
parents:
diff changeset
  3748
        if ( closeConnection != KErrNotFound )
hgs
parents:
diff changeset
  3749
            {
hgs
parents:
diff changeset
  3750
            GoOfflineL( connectedAccounts->At( closeConnection ) );
hgs
parents:
diff changeset
  3751
            }
hgs
parents:
diff changeset
  3752
        }
hgs
parents:
diff changeset
  3753
    CleanupStack::PopAndDestroy(); // connectedAccounts
hgs
parents:
diff changeset
  3754
hgs
parents:
diff changeset
  3755
    }
hgs
parents:
diff changeset
  3756
hgs
parents:
diff changeset
  3757
// ----------------------------------------------------
hgs
parents:
diff changeset
  3758
// CMceUi::GoOfflineL
hgs
parents:
diff changeset
  3759
// ----------------------------------------------------
hgs
parents:
diff changeset
  3760
void CMceUi::GoOfflineL( TMsvId aAccount )
hgs
parents:
diff changeset
  3761
    {
hgs
parents:
diff changeset
  3762
    MCELOGGER_ENTERFN("GoOfflineL()");
hgs
parents:
diff changeset
  3763
    TMsvEntry tentry;
hgs
parents:
diff changeset
  3764
    GetEntryL( aAccount, tentry );
hgs
parents:
diff changeset
  3765
    if ( tentry.Connected() )
hgs
parents:
diff changeset
  3766
        {
hgs
parents:
diff changeset
  3767
        ChangeServiceConnectionStateL( aAccount, EFalse );
hgs
parents:
diff changeset
  3768
        }
hgs
parents:
diff changeset
  3769
    MCELOGGER_LEAVEFN("GoOfflineL()");
hgs
parents:
diff changeset
  3770
    }
hgs
parents:
diff changeset
  3771
hgs
parents:
diff changeset
  3772
// ----------------------------------------------------
hgs
parents:
diff changeset
  3773
// CMceUi::ChangeServiceConnectionStateL
hgs
parents:
diff changeset
  3774
// ----------------------------------------------------
hgs
parents:
diff changeset
  3775
void CMceUi::ChangeServiceConnectionStateL(TMsvId aServiceId, TBool aConnect)
hgs
parents:
diff changeset
  3776
    {
hgs
parents:
diff changeset
  3777
    MCELOGGER_ENTERFN("ChangeServiceConnectionStateL()");
hgs
parents:
diff changeset
  3778
hgs
parents:
diff changeset
  3779
    if ( aConnect )
hgs
parents:
diff changeset
  3780
        {
hgs
parents:
diff changeset
  3781
        LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  3782
        }
hgs
parents:
diff changeset
  3783
hgs
parents:
diff changeset
  3784
    TMsvEntry tentry;
hgs
parents:
diff changeset
  3785
    (void)GetEntryL(aServiceId, tentry);
hgs
parents:
diff changeset
  3786
    CBaseMtmUi& ui = iMtmStore->GetMtmUiAndSetContextLC(tentry);
hgs
parents:
diff changeset
  3787
    CMsvOperation* op;
hgs
parents:
diff changeset
  3788
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  3789
hgs
parents:
diff changeset
  3790
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  3791
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  3792
hgs
parents:
diff changeset
  3793
    if ( aConnect )
hgs
parents:
diff changeset
  3794
        {
hgs
parents:
diff changeset
  3795
        op = ui.OpenL( singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  3796
        if ( tentry.iMtm != KSenduiMtmImap4Uid )
hgs
parents:
diff changeset
  3797
            {
hgs
parents:
diff changeset
  3798
            SetViewUpdateSuppressionFlag( ETrue, op );
hgs
parents:
diff changeset
  3799
            }
hgs
parents:
diff changeset
  3800
        if ( iAlwaysOnline && op )
hgs
parents:
diff changeset
  3801
            {
hgs
parents:
diff changeset
  3802
            AddOperationIdL( op->Id(), aServiceId );
hgs
parents:
diff changeset
  3803
            }
hgs
parents:
diff changeset
  3804
        }
hgs
parents:
diff changeset
  3805
    else
hgs
parents:
diff changeset
  3806
        {
hgs
parents:
diff changeset
  3807
        op = ui.CloseL( singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  3808
        if ( iAlwaysOnline && op )
hgs
parents:
diff changeset
  3809
           {
hgs
parents:
diff changeset
  3810
           RemoveOperationId( op->Id(), aServiceId );
hgs
parents:
diff changeset
  3811
           }
hgs
parents:
diff changeset
  3812
        }
hgs
parents:
diff changeset
  3813
hgs
parents:
diff changeset
  3814
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  3815
hgs
parents:
diff changeset
  3816
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  3817
    CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  3818
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  3819
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  3820
hgs
parents:
diff changeset
  3821
    CleanupStack::PopAndDestroy( 2 ); // CAknInputBlock, release mtmUi
hgs
parents:
diff changeset
  3822
    if ( iMceListView->ListContainer() && 
hgs
parents:
diff changeset
  3823
        ( MceViewActive(EMceMessageViewActive ) ) )
hgs
parents:
diff changeset
  3824
        {
hgs
parents:
diff changeset
  3825
        if ( aConnect )
hgs
parents:
diff changeset
  3826
            {
hgs
parents:
diff changeset
  3827
            iMceListView->ListContainer()->SetAnchorItemIdL(
hgs
parents:
diff changeset
  3828
                CMceMessageListContainerBase::EMessageListOperationConnect );
hgs
parents:
diff changeset
  3829
            }
hgs
parents:
diff changeset
  3830
        else
hgs
parents:
diff changeset
  3831
            {
hgs
parents:
diff changeset
  3832
            iMceListView->ListContainer()->SetAnchorItemIdL(
hgs
parents:
diff changeset
  3833
                CMceMessageListContainerBase::EMessageListOperationGeneral );
hgs
parents:
diff changeset
  3834
            }
hgs
parents:
diff changeset
  3835
        }
hgs
parents:
diff changeset
  3836
hgs
parents:
diff changeset
  3837
    MCELOGGER_LEAVEFN("ChangeServiceConnectionStateL()");
hgs
parents:
diff changeset
  3838
    }
hgs
parents:
diff changeset
  3839
hgs
parents:
diff changeset
  3840
// ----------------------------------------------------
hgs
parents:
diff changeset
  3841
// CMceUi::GetEntryL
hgs
parents:
diff changeset
  3842
// ----------------------------------------------------
hgs
parents:
diff changeset
  3843
TMsvId CMceUi::GetEntryL(TMsvId aId, TMsvEntry& aEntry) const
hgs
parents:
diff changeset
  3844
    {
hgs
parents:
diff changeset
  3845
    TMsvId service;
hgs
parents:
diff changeset
  3846
    User::LeaveIfError(iSession->GetEntry(aId, service, aEntry));
hgs
parents:
diff changeset
  3847
    return service;
hgs
parents:
diff changeset
  3848
    }
hgs
parents:
diff changeset
  3849
hgs
parents:
diff changeset
  3850
// ----------------------------------------------------
hgs
parents:
diff changeset
  3851
// CMceUi::SendSelectionL
hgs
parents:
diff changeset
  3852
// ----------------------------------------------------
hgs
parents:
diff changeset
  3853
void CMceUi::SendSelectionL(CMsvEntrySelection* aSel)
hgs
parents:
diff changeset
  3854
    {
hgs
parents:
diff changeset
  3855
    CleanupStack::PushL(aSel);
hgs
parents:
diff changeset
  3856
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  3857
    CleanupStack::Pop( aSel ); 
hgs
parents:
diff changeset
  3858
    CleanupStack::PushL( singleOpWatcher ); // guaranteed not to leave because of previous pop
hgs
parents:
diff changeset
  3859
hgs
parents:
diff changeset
  3860
    CMsvOperation* op = CMceSendOperation::NewL(
hgs
parents:
diff changeset
  3861
        *iSession, singleOpWatcher->iStatus, *iMtmStore, aSel );
hgs
parents:
diff changeset
  3862
        // aSel will be deleted!
hgs
parents:
diff changeset
  3863
hgs
parents:
diff changeset
  3864
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  3865
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  3866
    CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  3867
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  3868
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  3869
    }
hgs
parents:
diff changeset
  3870
hgs
parents:
diff changeset
  3871
// ----------------------------------------------------
hgs
parents:
diff changeset
  3872
// CMceUi::SendNowL
hgs
parents:
diff changeset
  3873
// ----------------------------------------------------
hgs
parents:
diff changeset
  3874
void CMceUi::SendNowL()
hgs
parents:
diff changeset
  3875
    {
hgs
parents:
diff changeset
  3876
hgs
parents:
diff changeset
  3877
    CMsvEntrySelection * selection = iMceListView->ListContainer()
hgs
parents:
diff changeset
  3878
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  3879
    if ( selection->Count() == 0 )
hgs
parents:
diff changeset
  3880
        {
hgs
parents:
diff changeset
  3881
        delete selection;
hgs
parents:
diff changeset
  3882
        return;
hgs
parents:
diff changeset
  3883
        }
hgs
parents:
diff changeset
  3884
hgs
parents:
diff changeset
  3885
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  3886
hgs
parents:
diff changeset
  3887
    // if we are sending email just ignore offline checks
hgs
parents:
diff changeset
  3888
    iEntry->SetEntryL( (*selection)[0] );
hgs
parents:
diff changeset
  3889
    const TMsvEntry& entry = iEntry->Entry();
hgs
parents:
diff changeset
  3890
hgs
parents:
diff changeset
  3891
    if ( entry.iMtm != KSenduiMtmSmtpUid &&
hgs
parents:
diff changeset
  3892
        FeatureManager::FeatureSupported( KFeatureIdOfflineMode ))
hgs
parents:
diff changeset
  3893
        {
hgs
parents:
diff changeset
  3894
        // check if offline mode has been set
hgs
parents:
diff changeset
  3895
        TInt offline = 1;
hgs
parents:
diff changeset
  3896
hgs
parents:
diff changeset
  3897
        CRepository* repository = NULL;
hgs
parents:
diff changeset
  3898
        TRAPD( ret, repository = CRepository::NewL(KCRUidCoreApplicationUIs) );
hgs
parents:
diff changeset
  3899
        CleanupStack::PushL( repository );
hgs
parents:
diff changeset
  3900
hgs
parents:
diff changeset
  3901
        if ( ret == KErrNone )
hgs
parents:
diff changeset
  3902
            {
hgs
parents:
diff changeset
  3903
            if ( repository->Get(KCoreAppUIsNetworkConnectionAllowed,offline) != KErrNone )
hgs
parents:
diff changeset
  3904
                {
hgs
parents:
diff changeset
  3905
                offline = 1;
hgs
parents:
diff changeset
  3906
                }
hgs
parents:
diff changeset
  3907
            }
hgs
parents:
diff changeset
  3908
hgs
parents:
diff changeset
  3909
        CleanupStack::Pop( repository );
hgs
parents:
diff changeset
  3910
        delete repository;
hgs
parents:
diff changeset
  3911
hgs
parents:
diff changeset
  3912
        if ( !offline )
hgs
parents:
diff changeset
  3913
            {
hgs
parents:
diff changeset
  3914
            // offline mode has been set
hgs
parents:
diff changeset
  3915
            HBufC* text = StringLoader::LoadLC( R_MCE_OFFLINE_NOT_POSSIBLE, CCoeEnv::Static() );
hgs
parents:
diff changeset
  3916
            CAknInformationNote* note = new (ELeave) CAknInformationNote();
hgs
parents:
diff changeset
  3917
            note->ExecuteLD(*text);
hgs
parents:
diff changeset
  3918
            CleanupStack::PopAndDestroy(2); //text, selection
hgs
parents:
diff changeset
  3919
            return;
hgs
parents:
diff changeset
  3920
            }
hgs
parents:
diff changeset
  3921
hgs
parents:
diff changeset
  3922
        }
hgs
parents:
diff changeset
  3923
hgs
parents:
diff changeset
  3924
    CleanupStack::Pop( selection ); // this is because SendSelectionL pushes selection immediately
hgs
parents:
diff changeset
  3925
    SendSelectionL( selection );
hgs
parents:
diff changeset
  3926
    }
hgs
parents:
diff changeset
  3927
hgs
parents:
diff changeset
  3928
// ----------------------------------------------------
hgs
parents:
diff changeset
  3929
// CMceUi::CancelSendingL
hgs
parents:
diff changeset
  3930
// ----------------------------------------------------
hgs
parents:
diff changeset
  3931
void CMceUi::CancelSendingL()
hgs
parents:
diff changeset
  3932
    {
hgs
parents:
diff changeset
  3933
    CMsvEntrySelection * selection = iMceListView->ListContainer()
hgs
parents:
diff changeset
  3934
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  3935
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  3936
hgs
parents:
diff changeset
  3937
    if ( selection->Count() == 0 ||
hgs
parents:
diff changeset
  3938
         IsMessageSendingL( selection->At(0) ) )
hgs
parents:
diff changeset
  3939
        {
hgs
parents:
diff changeset
  3940
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  3941
        return;
hgs
parents:
diff changeset
  3942
        }
hgs
parents:
diff changeset
  3943
hgs
parents:
diff changeset
  3944
    CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  3945
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  3946
hgs
parents:
diff changeset
  3947
    CMsvOperation* op = CMceCancelSendingOperation::NewL(
hgs
parents:
diff changeset
  3948
        *iSession,
hgs
parents:
diff changeset
  3949
        singleOpWatcher->iStatus,
hgs
parents:
diff changeset
  3950
        selection->At( 0 ),
hgs
parents:
diff changeset
  3951
        CMceCancelSendingOperation::ECancelOnly,
hgs
parents:
diff changeset
  3952
        *iMtmStore );
hgs
parents:
diff changeset
  3953
hgs
parents:
diff changeset
  3954
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  3955
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  3956
    CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  3957
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  3958
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  3959
hgs
parents:
diff changeset
  3960
    CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  3961
    }
hgs
parents:
diff changeset
  3962
hgs
parents:
diff changeset
  3963
// ----------------------------------------------------
hgs
parents:
diff changeset
  3964
// CMceUi::FetchNewL
hgs
parents:
diff changeset
  3965
// ----------------------------------------------------
hgs
parents:
diff changeset
  3966
void CMceUi::FetchNewL()
hgs
parents:
diff changeset
  3967
    {
hgs
parents:
diff changeset
  3968
    DoAsyncFunctionOnCurrentContextL( KMtmUiFunctionFetchNew );
hgs
parents:
diff changeset
  3969
    iMceListView->ListContainer()->SetAnchorItemIdL(
hgs
parents:
diff changeset
  3970
        CMceMessageListContainerBase::EMessageListOperationFetchNew );
hgs
parents:
diff changeset
  3971
    }
hgs
parents:
diff changeset
  3972
hgs
parents:
diff changeset
  3973
// ----------------------------------------------------
hgs
parents:
diff changeset
  3974
// CMceUi::FetchSelectedL
hgs
parents:
diff changeset
  3975
// ----------------------------------------------------
hgs
parents:
diff changeset
  3976
void CMceUi::FetchSelectedL()
hgs
parents:
diff changeset
  3977
    {
hgs
parents:
diff changeset
  3978
    __ASSERT_DEBUG( MceViewActive( EMceMessageViewActive ),
hgs
parents:
diff changeset
  3979
        Panic( EMceUiErrCannotFetchFromMainView ) );
hgs
parents:
diff changeset
  3980
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  3981
        {
hgs
parents:
diff changeset
  3982
        return;
hgs
parents:
diff changeset
  3983
        }
hgs
parents:
diff changeset
  3984
hgs
parents:
diff changeset
  3985
    CMsvEntrySelection* sel = iMceListView->ListContainer()
hgs
parents:
diff changeset
  3986
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  3987
hgs
parents:
diff changeset
  3988
    if ( sel->Count() == 0 )
hgs
parents:
diff changeset
  3989
        {
hgs
parents:
diff changeset
  3990
        delete sel;
hgs
parents:
diff changeset
  3991
        return;
hgs
parents:
diff changeset
  3992
        }
hgs
parents:
diff changeset
  3993
hgs
parents:
diff changeset
  3994
    CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  3995
hgs
parents:
diff changeset
  3996
    iMceListView->ListContainer()->SetAnchorItemIdL(
hgs
parents:
diff changeset
  3997
        CMceMessageListContainerBase::EMessageListOperationFetchSelected );
hgs
parents:
diff changeset
  3998
    DoAsyncFunctionOnCurrentContextL(KMtmUiFunctionFetchSelected, *sel);
hgs
parents:
diff changeset
  3999
    CleanupStack::PopAndDestroy( sel );
hgs
parents:
diff changeset
  4000
    }
hgs
parents:
diff changeset
  4001
hgs
parents:
diff changeset
  4002
// ----------------------------------------------------
hgs
parents:
diff changeset
  4003
// CMceUi::FetchAllL
hgs
parents:
diff changeset
  4004
// ----------------------------------------------------
hgs
parents:
diff changeset
  4005
void CMceUi::FetchAllL()
hgs
parents:
diff changeset
  4006
    {
hgs
parents:
diff changeset
  4007
    DoAsyncFunctionOnCurrentContextL(KMtmUiFunctionFetchAll);
hgs
parents:
diff changeset
  4008
    iMceListView->ListContainer()->SetAnchorItemIdL(
hgs
parents:
diff changeset
  4009
        CMceMessageListContainerBase::EMessageListOperationFetchSelected );
hgs
parents:
diff changeset
  4010
    }
hgs
parents:
diff changeset
  4011
hgs
parents:
diff changeset
  4012
// ----------------------------------------------------
hgs
parents:
diff changeset
  4013
// CMceUi::DoAsyncFunctionOnCurrentContextL
hgs
parents:
diff changeset
  4014
// ----------------------------------------------------
hgs
parents:
diff changeset
  4015
void CMceUi::DoAsyncFunctionOnCurrentContextL(TInt aFunctionId)
hgs
parents:
diff changeset
  4016
    {
hgs
parents:
diff changeset
  4017
    CMsvEntrySelection* sel = new (ELeave) CMsvEntrySelection();
hgs
parents:
diff changeset
  4018
    CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  4019
hgs
parents:
diff changeset
  4020
    DoAsyncFunctionOnCurrentContextL(aFunctionId, *sel);
hgs
parents:
diff changeset
  4021
hgs
parents:
diff changeset
  4022
    CleanupStack::PopAndDestroy( sel );
hgs
parents:
diff changeset
  4023
    }
hgs
parents:
diff changeset
  4024
hgs
parents:
diff changeset
  4025
// ----------------------------------------------------
hgs
parents:
diff changeset
  4026
// CMceUi::DoAsyncFunctionOnCurrentContextL
hgs
parents:
diff changeset
  4027
// ----------------------------------------------------
hgs
parents:
diff changeset
  4028
void CMceUi::DoAsyncFunctionOnCurrentContextL(TInt aFunctionId, CMsvEntrySelection& aSelection)
hgs
parents:
diff changeset
  4029
    {
hgs
parents:
diff changeset
  4030
    DoAsyncFunctionL(aFunctionId, aSelection, iMceListView->ListContainer()->FolderEntry());
hgs
parents:
diff changeset
  4031
    }
hgs
parents:
diff changeset
  4032
hgs
parents:
diff changeset
  4033
// ----------------------------------------------------
hgs
parents:
diff changeset
  4034
// CMceUi::DoAsyncFunctionL
hgs
parents:
diff changeset
  4035
// ----------------------------------------------------
hgs
parents:
diff changeset
  4036
void CMceUi::DoAsyncFunctionL(TInt aFunctionId, const TMsvEntry& aContext)
hgs
parents:
diff changeset
  4037
    {
hgs
parents:
diff changeset
  4038
    CMsvEntrySelection* sel= new (ELeave) CMsvEntrySelection();
hgs
parents:
diff changeset
  4039
    CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  4040
    DoAsyncFunctionL(aFunctionId, *sel, aContext);
hgs
parents:
diff changeset
  4041
    CleanupStack::PopAndDestroy( sel );
hgs
parents:
diff changeset
  4042
    }
hgs
parents:
diff changeset
  4043
hgs
parents:
diff changeset
  4044
// ----------------------------------------------------
hgs
parents:
diff changeset
  4045
// CMceUi::DoAsyncFunctionL
hgs
parents:
diff changeset
  4046
// ----------------------------------------------------
hgs
parents:
diff changeset
  4047
void CMceUi::DoAsyncFunctionL( TInt aFunctionId, CMsvEntrySelection& aSelection,
hgs
parents:
diff changeset
  4048
    const TMsvEntry& aContext)
hgs
parents:
diff changeset
  4049
    {
hgs
parents:
diff changeset
  4050
    LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  4051
hgs
parents:
diff changeset
  4052
    CBaseMtmUi& mtmUi = iMtmStore->GetMtmUiAndSetContextLC( aContext );
hgs
parents:
diff changeset
  4053
hgs
parents:
diff changeset
  4054
    TBuf8<1> blankParams;
hgs
parents:
diff changeset
  4055
    CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  4056
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  4057
hgs
parents:
diff changeset
  4058
    CMsvOperation* op = mtmUi.InvokeAsyncFunctionL( aFunctionId, aSelection,
hgs
parents:
diff changeset
  4059
        singleOpWatcher->iStatus, blankParams );
hgs
parents:
diff changeset
  4060
hgs
parents:
diff changeset
  4061
    if ( CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, aContext.iMtm ) &&
hgs
parents:
diff changeset
  4062
         (aFunctionId == KMtmUiFunctionFetchNew ||
hgs
parents:
diff changeset
  4063
          aFunctionId == KMtmUiFunctionFetchAll 
hgs
parents:
diff changeset
  4064
        ))
hgs
parents:
diff changeset
  4065
        {
hgs
parents:
diff changeset
  4066
        SetViewUpdateSuppressionFlag( ETrue, op );   
hgs
parents:
diff changeset
  4067
        }
hgs
parents:
diff changeset
  4068
hgs
parents:
diff changeset
  4069
    if ( iAlwaysOnline && op )
hgs
parents:
diff changeset
  4070
        {
hgs
parents:
diff changeset
  4071
        TMsvEntry tEntry;
hgs
parents:
diff changeset
  4072
        TMsvId serviceId;
hgs
parents:
diff changeset
  4073
        User::LeaveIfError( iSession->GetEntry( aContext.iServiceId, serviceId, tEntry ) );
hgs
parents:
diff changeset
  4074
        if ( !tEntry.Connected() )
hgs
parents:
diff changeset
  4075
            {
hgs
parents:
diff changeset
  4076
            AddOperationIdL( op->Id(), serviceId );
hgs
parents:
diff changeset
  4077
            }
hgs
parents:
diff changeset
  4078
        }
hgs
parents:
diff changeset
  4079
hgs
parents:
diff changeset
  4080
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  4081
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  4082
    CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  4083
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  4084
hgs
parents:
diff changeset
  4085
    if ( aFunctionId == KMtmUiFunctionFetchNew )
hgs
parents:
diff changeset
  4086
        {
hgs
parents:
diff changeset
  4087
        iFetchNewOperation = singleOpWatcher;
hgs
parents:
diff changeset
  4088
        }
hgs
parents:
diff changeset
  4089
hgs
parents:
diff changeset
  4090
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  4091
hgs
parents:
diff changeset
  4092
    CleanupStack::PopAndDestroy(); // release mtmUI
hgs
parents:
diff changeset
  4093
    iMceListView->ListContainer()->ClearSelection();
hgs
parents:
diff changeset
  4094
    }
hgs
parents:
diff changeset
  4095
hgs
parents:
diff changeset
  4096
// ----------------------------------------------------
hgs
parents:
diff changeset
  4097
// CMceUi::AddMTMFunctionsL
hgs
parents:
diff changeset
  4098
// ----------------------------------------------------
hgs
parents:
diff changeset
  4099
void CMceUi::AddMTMFunctionsL(CEikMenuPane& aMenuPane, TInt aMenuCommandId)
hgs
parents:
diff changeset
  4100
    {
hgs
parents:
diff changeset
  4101
    MCELOGGER_ENTERFN("AddMTMFunctionsL()");
hgs
parents:
diff changeset
  4102
    TMsvEntry selectedEntry;
hgs
parents:
diff changeset
  4103
    TBool foundSelectedEntry = GetCurrentEntryL( selectedEntry );
hgs
parents:
diff changeset
  4104
    TMsvEntry openedEntry;
hgs
parents:
diff changeset
  4105
    TBool foundOpenedEntry = GetCurrentEntryL( openedEntry, ETrue );
hgs
parents:
diff changeset
  4106
hgs
parents:
diff changeset
  4107
    CEikMenuPaneItem::SData data;
hgs
parents:
diff changeset
  4108
    data.iCascadeId=0;
hgs
parents:
diff changeset
  4109
    data.iFlags=0;
hgs
parents:
diff changeset
  4110
    TInt cc;
hgs
parents:
diff changeset
  4111
    TInt sendCmd = EMceCmdFirstMTMFunction;
hgs
parents:
diff changeset
  4112
    const TInt count = iMTMFunctionsArray->Count();
hgs
parents:
diff changeset
  4113
    for ( cc = 0; cc < count; cc++ )
hgs
parents:
diff changeset
  4114
        {
hgs
parents:
diff changeset
  4115
        TMsgFunctionInfo& functionInfo = iMTMFunctionsArray->At(cc);
hgs
parents:
diff changeset
  4116
        data.iText = functionInfo.iCaption;
hgs
parents:
diff changeset
  4117
        data.iCommandId = sendCmd;
hgs
parents:
diff changeset
  4118
        if ( functionInfo.iFlags & EMtudContextSpecific )
hgs
parents:
diff changeset
  4119
            {
hgs
parents:
diff changeset
  4120
            if ( ( foundSelectedEntry && !CheckCommandAvailableL( sendCmd, selectedEntry ) ) ||
hgs
parents:
diff changeset
  4121
                 ( foundOpenedEntry && !CheckCommandAvailableL( sendCmd, openedEntry ) )
hgs
parents:
diff changeset
  4122
                )
hgs
parents:
diff changeset
  4123
                {
hgs
parents:
diff changeset
  4124
                // Enable Item Specific Flag
hgs
parents:
diff changeset
  4125
                if(functionInfo.iFlags & EMtudCommandItemSpecific)
hgs
parents:
diff changeset
  4126
		    {
hgs
parents:
diff changeset
  4127
                    data.iFlags |= EEikMenuItemSpecific;
hgs
parents:
diff changeset
  4128
		    }
hgs
parents:
diff changeset
  4129
                
hgs
parents:
diff changeset
  4130
                if ( functionInfo.iFuncId == KMtmUiFunctionMessageInfo )
hgs
parents:
diff changeset
  4131
                    {
hgs
parents:
diff changeset
  4132
					sendCmd++;
hgs
parents:
diff changeset
  4133
					continue;
hgs
parents:
diff changeset
  4134
                    }
hgs
parents:
diff changeset
  4135
hgs
parents:
diff changeset
  4136
                else if ( functionInfo.iFuncId == KMtmUiFunctionDeliveryStatus )
hgs
parents:
diff changeset
  4137
                    {
hgs
parents:
diff changeset
  4138
                    data.iFlags |= EEikMenuItemSpecific;               
hgs
parents:
diff changeset
  4139
                    aMenuPane.AddMenuItemL( data, EMceCmdUndelete );
hgs
parents:
diff changeset
  4140
                    }
hgs
parents:
diff changeset
  4141
hgs
parents:
diff changeset
  4142
                else if ( functionInfo.iFuncId == KMtmUiFunctionFetchMMS ) //MMS notification
hgs
parents:
diff changeset
  4143
                    {
hgs
parents:
diff changeset
  4144
                    data.iFlags |= EEikMenuItemSpecific; 
hgs
parents:
diff changeset
  4145
                    aMenuPane.AddMenuItemL( data, EAknCmdOpen );
hgs
parents:
diff changeset
  4146
                    }
hgs
parents:
diff changeset
  4147
hgs
parents:
diff changeset
  4148
                else if ( functionInfo.iFuncId == KMtmUiFunctionFetchSyncML ) //SyncML Retrieve
hgs
parents:
diff changeset
  4149
                    {
hgs
parents:
diff changeset
  4150
                    if ( selectedEntry.iMtm == KSenduiMtmSyncMLEmailUid )
hgs
parents:
diff changeset
  4151
                        {
hgs
parents:
diff changeset
  4152
                        aMenuPane.AddMenuItemL( data, EAknCmdOpen );
hgs
parents:
diff changeset
  4153
                        }
hgs
parents:
diff changeset
  4154
                    else
hgs
parents:
diff changeset
  4155
                        {
hgs
parents:
diff changeset
  4156
                        // nothing is added
hgs
parents:
diff changeset
  4157
                        }
hgs
parents:
diff changeset
  4158
                    }
hgs
parents:
diff changeset
  4159
hgs
parents:
diff changeset
  4160
                else if ( functionInfo.iFuncId == KMtmUiFunctionMMBox )
hgs
parents:
diff changeset
  4161
                    {
hgs
parents:
diff changeset
  4162
                    aMenuPane.AddMenuItemL( data, EAknCmdOpen );
hgs
parents:
diff changeset
  4163
                    }
hgs
parents:
diff changeset
  4164
hgs
parents:
diff changeset
  4165
                else
hgs
parents:
diff changeset
  4166
                    {
hgs
parents:
diff changeset
  4167
                    // Following comparison added to hide MCE's Mark as read/Unread 
hgs
parents:
diff changeset
  4168
                    // as duplicate copy of same options was provided by Visto MTM
hgs
parents:
diff changeset
  4169
                    CCoeEnv* ownEikonEnvmak = CEikonEnv::Static();
hgs
parents:
diff changeset
  4170
                    HBufC* markasRead = ownEikonEnvmak->AllocReadResourceLC( R_QTN_MCE_MARKAS_READ );
hgs
parents:
diff changeset
  4171
                    TBufC<30> bufread(markasRead->Des());
hgs
parents:
diff changeset
  4172
                    HBufC* markasUnRead = ownEikonEnvmak->AllocReadResourceLC( R_QTN_MCE_MARKAS_UNREAD );
hgs
parents:
diff changeset
  4173
                    TBufC<30> bufUnread(markasUnRead->Des());
hgs
parents:
diff changeset
  4174
                    CleanupStack::PopAndDestroy(2); //markasUnRead, markasRead
hgs
parents:
diff changeset
  4175
hgs
parents:
diff changeset
  4176
                    // Compare the function Caption with buffred value
hgs
parents:
diff changeset
  4177
                    if ( functionInfo.iCaption.FindF(bufread) == KErrNone 
hgs
parents:
diff changeset
  4178
                       || functionInfo.iCaption.FindF(bufUnread) == KErrNone )
hgs
parents:
diff changeset
  4179
                        {
hgs
parents:
diff changeset
  4180
                        iMceListView->SetMarkReadUnread( ETrue );
hgs
parents:
diff changeset
  4181
                        }
hgs
parents:
diff changeset
  4182
hgs
parents:
diff changeset
  4183
                    aMenuPane.AddMenuItemL( data, aMenuCommandId );
hgs
parents:
diff changeset
  4184
                    }
hgs
parents:
diff changeset
  4185
                }
hgs
parents:
diff changeset
  4186
            }
hgs
parents:
diff changeset
  4187
        else
hgs
parents:
diff changeset
  4188
            {
hgs
parents:
diff changeset
  4189
            if ( MceViewActive( EMceMainViewActive ) && !CheckMTMFunctionL( functionInfo, selectedEntry ) )
hgs
parents:
diff changeset
  4190
                {
hgs
parents:
diff changeset
  4191
                // Enable Item Specific Flag
hgs
parents:
diff changeset
  4192
                if(functionInfo.iFlags & EMtudCommandItemSpecific)
hgs
parents:
diff changeset
  4193
                    {
hgs
parents:
diff changeset
  4194
                    data.iFlags |= EEikMenuItemSpecific;
hgs
parents:
diff changeset
  4195
                    }
hgs
parents:
diff changeset
  4196
                aMenuPane.AddMenuItemL( data, aMenuCommandId );
hgs
parents:
diff changeset
  4197
                }
hgs
parents:
diff changeset
  4198
            }
hgs
parents:
diff changeset
  4199
        sendCmd++;
hgs
parents:
diff changeset
  4200
        }
hgs
parents:
diff changeset
  4201
    MCELOGGER_LEAVEFN("AddMTMFunctionsL()");
hgs
parents:
diff changeset
  4202
    }
hgs
parents:
diff changeset
  4203
hgs
parents:
diff changeset
  4204
// ----------------------------------------------------
hgs
parents:
diff changeset
  4205
// CMceUi::CheckMTMFunctionL
hgs
parents:
diff changeset
  4206
// ----------------------------------------------------
hgs
parents:
diff changeset
  4207
TInt CMceUi::CheckMTMFunctionL( const TMsgFunctionInfo& aFunction, TMsvEntry& aEntryToCheck )
hgs
parents:
diff changeset
  4208
    {
hgs
parents:
diff changeset
  4209
    TInt functionAvailable = KErrNotFound;
hgs
parents:
diff changeset
  4210
hgs
parents:
diff changeset
  4211
    CBaseMtmUiData* uiData = NULL;
hgs
parents:
diff changeset
  4212
hgs
parents:
diff changeset
  4213
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  4214
        {
hgs
parents:
diff changeset
  4215
        if ( !( aFunction.iFlags & EMtudContextSpecific ) )
hgs
parents:
diff changeset
  4216
            {
hgs
parents:
diff changeset
  4217
            uiData = GetMtmUiDataL( aFunction.iMtmUid );
hgs
parents:
diff changeset
  4218
            if ( uiData )
hgs
parents:
diff changeset
  4219
                {
hgs
parents:
diff changeset
  4220
                functionAvailable = uiData->OperationSupportedL(aFunction.iFuncId, aEntryToCheck);
hgs
parents:
diff changeset
  4221
                }
hgs
parents:
diff changeset
  4222
            }
hgs
parents:
diff changeset
  4223
        }
hgs
parents:
diff changeset
  4224
    else
hgs
parents:
diff changeset
  4225
        {
hgs
parents:
diff changeset
  4226
        if ( aFunction.iMtmUid == aEntryToCheck.iMtm )
hgs
parents:
diff changeset
  4227
            {
hgs
parents:
diff changeset
  4228
            uiData = GetMtmUiDataL( aFunction.iMtmUid );
hgs
parents:
diff changeset
  4229
            }
hgs
parents:
diff changeset
  4230
hgs
parents:
diff changeset
  4231
        if ( aFunction.iFlags & EMtudContextSpecific )
hgs
parents:
diff changeset
  4232
            {
hgs
parents:
diff changeset
  4233
            if ( uiData )
hgs
parents:
diff changeset
  4234
                {
hgs
parents:
diff changeset
  4235
                functionAvailable =
hgs
parents:
diff changeset
  4236
                    uiData->OperationSupportedL(aFunction.iFuncId, aEntryToCheck);
hgs
parents:
diff changeset
  4237
                }
hgs
parents:
diff changeset
  4238
            }
hgs
parents:
diff changeset
  4239
        else if ( aFunction.iFlags & EMtudRemoteOnly )
hgs
parents:
diff changeset
  4240
            {
hgs
parents:
diff changeset
  4241
            if ( uiData &&
hgs
parents:
diff changeset
  4242
                 aEntryToCheck.iMtm != KUidMsvLocalServiceMtm )
hgs
parents:
diff changeset
  4243
                {
hgs
parents:
diff changeset
  4244
                functionAvailable =
hgs
parents:
diff changeset
  4245
                    uiData->OperationSupportedL(aFunction.iFuncId, aEntryToCheck);
hgs
parents:
diff changeset
  4246
                }
hgs
parents:
diff changeset
  4247
            }
hgs
parents:
diff changeset
  4248
        }
hgs
parents:
diff changeset
  4249
hgs
parents:
diff changeset
  4250
    return functionAvailable;
hgs
parents:
diff changeset
  4251
    }
hgs
parents:
diff changeset
  4252
hgs
parents:
diff changeset
  4253
// ----------------------------------------------------
hgs
parents:
diff changeset
  4254
// CMceUi::GetCurrentEntryL
hgs
parents:
diff changeset
  4255
// ----------------------------------------------------
hgs
parents:
diff changeset
  4256
TBool CMceUi::GetCurrentEntryL(TMsvEntry& aEntry, TBool aOpenedFolder /*= EFalse*/) const
hgs
parents:
diff changeset
  4257
    {
hgs
parents:
diff changeset
  4258
    MCELOGGER_ENTERFN("GetCurrentEntryL()");
hgs
parents:
diff changeset
  4259
hgs
parents:
diff changeset
  4260
    TMsvId cursorId = KErrNotFound;
hgs
parents:
diff changeset
  4261
hgs
parents:
diff changeset
  4262
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  4263
        {
hgs
parents:
diff changeset
  4264
        cursorId = iMceMainView->ListContainer()->CurrentItemId();
hgs
parents:
diff changeset
  4265
        }
hgs
parents:
diff changeset
  4266
    else
hgs
parents:
diff changeset
  4267
        {
hgs
parents:
diff changeset
  4268
        if ( aOpenedFolder )
hgs
parents:
diff changeset
  4269
            {
hgs
parents:
diff changeset
  4270
            cursorId = iMceListView->ListContainer()->CurrentFolderId();
hgs
parents:
diff changeset
  4271
            }
hgs
parents:
diff changeset
  4272
        else
hgs
parents:
diff changeset
  4273
            {
hgs
parents:
diff changeset
  4274
            if ( iMceListView->ListContainer()->CurrentItemSelectionCount() == 1 )
hgs
parents:
diff changeset
  4275
                {
hgs
parents:
diff changeset
  4276
                CMsvEntrySelection* selection =
hgs
parents:
diff changeset
  4277
                    iMceListView->ListContainer()->CurrentItemSelectionL();
hgs
parents:
diff changeset
  4278
                cursorId = selection->At(0);
hgs
parents:
diff changeset
  4279
                delete selection;
hgs
parents:
diff changeset
  4280
                }
hgs
parents:
diff changeset
  4281
            else
hgs
parents:
diff changeset
  4282
                {
hgs
parents:
diff changeset
  4283
                cursorId = KErrNotFound;
hgs
parents:
diff changeset
  4284
                }
hgs
parents:
diff changeset
  4285
            }
hgs
parents:
diff changeset
  4286
        }
hgs
parents:
diff changeset
  4287
hgs
parents:
diff changeset
  4288
    if ( cursorId == KErrNotFound )
hgs
parents:
diff changeset
  4289
        {
hgs
parents:
diff changeset
  4290
        MCELOGGER_LEAVEFN("GetCurrentEntryL() selected entry not found");
hgs
parents:
diff changeset
  4291
        return EFalse;
hgs
parents:
diff changeset
  4292
        }
hgs
parents:
diff changeset
  4293
hgs
parents:
diff changeset
  4294
    TMsvId service;
hgs
parents:
diff changeset
  4295
    const TInt err = iSession->GetEntry(cursorId, service, aEntry);
hgs
parents:
diff changeset
  4296
hgs
parents:
diff changeset
  4297
    if ( err != KErrNone && err != KErrNotFound )
hgs
parents:
diff changeset
  4298
        {
hgs
parents:
diff changeset
  4299
        User::Leave( err );
hgs
parents:
diff changeset
  4300
        }
hgs
parents:
diff changeset
  4301
hgs
parents:
diff changeset
  4302
    MCELOGGER_LEAVEFN("GetCurrentEntryL()");
hgs
parents:
diff changeset
  4303
    return ( err == KErrNone );
hgs
parents:
diff changeset
  4304
    }
hgs
parents:
diff changeset
  4305
hgs
parents:
diff changeset
  4306
// ----------------------------------------------------
hgs
parents:
diff changeset
  4307
// CMceUi::CheckCommandAvailableL
hgs
parents:
diff changeset
  4308
// ----------------------------------------------------
hgs
parents:
diff changeset
  4309
TInt CMceUi::CheckCommandAvailableL( TInt aCommand, TMsvEntry& aEntryToCheck )
hgs
parents:
diff changeset
  4310
    {
hgs
parents:
diff changeset
  4311
    TInt rid = 0; // command is available
hgs
parents:
diff changeset
  4312
hgs
parents:
diff changeset
  4313
    const TBool remoteContext =
hgs
parents:
diff changeset
  4314
        aEntryToCheck.iServiceId != KMsvLocalServiceIndexEntryId;
hgs
parents:
diff changeset
  4315
hgs
parents:
diff changeset
  4316
    switch ( aCommand )
hgs
parents:
diff changeset
  4317
        {
hgs
parents:
diff changeset
  4318
        case EMceCmdUndelete:
hgs
parents:
diff changeset
  4319
            if ( remoteContext )
hgs
parents:
diff changeset
  4320
                {
hgs
parents:
diff changeset
  4321
                CBaseMtmUiData* uiData = GetMtmUiDataL( aEntryToCheck.iMtm );
hgs
parents:
diff changeset
  4322
                if ( !uiData || !uiData->CanUnDeleteFromEntryL(aEntryToCheck, rid) && !rid )
hgs
parents:
diff changeset
  4323
                    {
hgs
parents:
diff changeset
  4324
                    rid = KErrNotSupported;
hgs
parents:
diff changeset
  4325
                    }
hgs
parents:
diff changeset
  4326
                }
hgs
parents:
diff changeset
  4327
            break;
hgs
parents:
diff changeset
  4328
hgs
parents:
diff changeset
  4329
        case EMceCmdReply:
hgs
parents:
diff changeset
  4330
            {
hgs
parents:
diff changeset
  4331
            CBaseMtmUiData* uiData = GetMtmUiDataL( aEntryToCheck.iMtm );
hgs
parents:
diff changeset
  4332
            if ( !uiData || !uiData->CanReplyToEntryL(aEntryToCheck, rid) )
hgs
parents:
diff changeset
  4333
                {
hgs
parents:
diff changeset
  4334
                rid = KErrNotSupported;
hgs
parents:
diff changeset
  4335
                }
hgs
parents:
diff changeset
  4336
            else
hgs
parents:
diff changeset
  4337
                {
hgs
parents:
diff changeset
  4338
                if ( aEntryToCheck.iMtm == KSenduiMtmSmsUid || aEntryToCheck.iMtm == KSenduiMtmBioUid 
hgs
parents:
diff changeset
  4339
                     || aEntryToCheck.iMtm == KSenduiMtmMmsUid || aEntryToCheck.iMtm == KSenduiMMSNotificationUid )
hgs
parents:
diff changeset
  4340
                    {
hgs
parents:
diff changeset
  4341
                    if ( !MceUtils::ValidPhoneNumberL( aEntryToCheck.Id(), *iSession ) )
hgs
parents:
diff changeset
  4342
                        {
hgs
parents:
diff changeset
  4343
                        rid = KErrNotSupported;
hgs
parents:
diff changeset
  4344
                        }
hgs
parents:
diff changeset
  4345
                    }
hgs
parents:
diff changeset
  4346
                
hgs
parents:
diff changeset
  4347
                }
hgs
parents:
diff changeset
  4348
            }
hgs
parents:
diff changeset
  4349
            break;
hgs
parents:
diff changeset
  4350
         
hgs
parents:
diff changeset
  4351
        case EMceCmdForward:
hgs
parents:
diff changeset
  4352
            {
hgs
parents:
diff changeset
  4353
            CBaseMtmUiData* uiData = GetMtmUiDataL( aEntryToCheck.iMtm );
hgs
parents:
diff changeset
  4354
            if ( !uiData || !uiData->CanForwardEntryL( aEntryToCheck, rid ) )
hgs
parents:
diff changeset
  4355
                {
hgs
parents:
diff changeset
  4356
                rid = KErrNotSupported;
hgs
parents:
diff changeset
  4357
                }
hgs
parents:
diff changeset
  4358
            }
hgs
parents:
diff changeset
  4359
            break;   
hgs
parents:
diff changeset
  4360
            
hgs
parents:
diff changeset
  4361
        default:
hgs
parents:
diff changeset
  4362
            if (aCommand >= EMceCmdFirstMTMFunction)
hgs
parents:
diff changeset
  4363
                {
hgs
parents:
diff changeset
  4364
                rid = CheckMTMFunctionL(
hgs
parents:
diff changeset
  4365
                    iMTMFunctionsArray->At( aCommand-EMceCmdFirstMTMFunction ), aEntryToCheck );
hgs
parents:
diff changeset
  4366
                }
hgs
parents:
diff changeset
  4367
            else
hgs
parents:
diff changeset
  4368
                {
hgs
parents:
diff changeset
  4369
                rid = KErrNotSupported;
hgs
parents:
diff changeset
  4370
                }
hgs
parents:
diff changeset
  4371
            break;
hgs
parents:
diff changeset
  4372
        };
hgs
parents:
diff changeset
  4373
hgs
parents:
diff changeset
  4374
    return rid;
hgs
parents:
diff changeset
  4375
    }
hgs
parents:
diff changeset
  4376
hgs
parents:
diff changeset
  4377
// ----------------------------------------------------
hgs
parents:
diff changeset
  4378
// CMceUi::CheckCommandAvailableL
hgs
parents:
diff changeset
  4379
// ----------------------------------------------------
hgs
parents:
diff changeset
  4380
TInt CMceUi::CheckCommandAvailableL( TInt aCommand, CMsvEntrySelection* aEntriesToCheck )
hgs
parents:
diff changeset
  4381
    {
hgs
parents:
diff changeset
  4382
    __ASSERT_DEBUG( aEntriesToCheck, Panic( EMceUiErrArrayEmpty ) );
hgs
parents:
diff changeset
  4383
    TInt rid = 0; // command is available
hgs
parents:
diff changeset
  4384
    if ( !aEntriesToCheck || aEntriesToCheck->Count() == 0 )
hgs
parents:
diff changeset
  4385
        {
hgs
parents:
diff changeset
  4386
#if defined(_DEBUG)
hgs
parents:
diff changeset
  4387
        Panic(EMceUiErrArrayEmpty);
hgs
parents:
diff changeset
  4388
#endif
hgs
parents:
diff changeset
  4389
        return KErrNotSupported;
hgs
parents:
diff changeset
  4390
        }
hgs
parents:
diff changeset
  4391
hgs
parents:
diff changeset
  4392
    TMsvEntry entry;
hgs
parents:
diff changeset
  4393
    TMsvId serviceId;
hgs
parents:
diff changeset
  4394
    TMsvId id = (*aEntriesToCheck)[0];
hgs
parents:
diff changeset
  4395
hgs
parents:
diff changeset
  4396
    if ( iSession->GetEntry( id, serviceId, entry ) != KErrNone )
hgs
parents:
diff changeset
  4397
        {
hgs
parents:
diff changeset
  4398
        return KErrNotSupported;
hgs
parents:
diff changeset
  4399
        }
hgs
parents:
diff changeset
  4400
hgs
parents:
diff changeset
  4401
    if (aCommand >= EMceCmdFirstMTMFunction)
hgs
parents:
diff changeset
  4402
        {
hgs
parents:
diff changeset
  4403
        rid = KErrNotSupported;
hgs
parents:
diff changeset
  4404
        }
hgs
parents:
diff changeset
  4405
    else if ( aCommand == EMceCmdUndelete )
hgs
parents:
diff changeset
  4406
        {
hgs
parents:
diff changeset
  4407
        if ( entry.iServiceId != KMsvLocalServiceIndexEntryId )
hgs
parents:
diff changeset
  4408
            {
hgs
parents:
diff changeset
  4409
            CBaseMtmUiData* uiData = GetMtmUiDataL( entry.iMtm );
hgs
parents:
diff changeset
  4410
            TBool canUndelete = EFalse;
hgs
parents:
diff changeset
  4411
            if ( uiData )
hgs
parents:
diff changeset
  4412
                {
hgs
parents:
diff changeset
  4413
                const TInt count = aEntriesToCheck->Count();
hgs
parents:
diff changeset
  4414
                for ( TInt loop = 0; loop < count && !canUndelete; loop++ )
hgs
parents:
diff changeset
  4415
                    {
hgs
parents:
diff changeset
  4416
                    id = (*aEntriesToCheck)[loop];
hgs
parents:
diff changeset
  4417
                    if ( iSession->GetEntry( id, serviceId, entry ) == KErrNone &&
hgs
parents:
diff changeset
  4418
                         uiData->CanUnDeleteFromEntryL(entry, rid) )
hgs
parents:
diff changeset
  4419
                        {
hgs
parents:
diff changeset
  4420
                        canUndelete = ETrue;
hgs
parents:
diff changeset
  4421
                        }
hgs
parents:
diff changeset
  4422
                    }
hgs
parents:
diff changeset
  4423
                }
hgs
parents:
diff changeset
  4424
            rid = canUndelete;
hgs
parents:
diff changeset
  4425
            }
hgs
parents:
diff changeset
  4426
        else
hgs
parents:
diff changeset
  4427
            {
hgs
parents:
diff changeset
  4428
            rid = KErrNotSupported;
hgs
parents:
diff changeset
  4429
            }
hgs
parents:
diff changeset
  4430
        }
hgs
parents:
diff changeset
  4431
hgs
parents:
diff changeset
  4432
    return rid;
hgs
parents:
diff changeset
  4433
    }
hgs
parents:
diff changeset
  4434
hgs
parents:
diff changeset
  4435
hgs
parents:
diff changeset
  4436
// ----------------------------------------------------
hgs
parents:
diff changeset
  4437
// CMceUi::HandleMTMFunctionL
hgs
parents:
diff changeset
  4438
// ----------------------------------------------------
hgs
parents:
diff changeset
  4439
void CMceUi::HandleMTMFunctionL(const TMsgFunctionInfo& aFunction)
hgs
parents:
diff changeset
  4440
    {
hgs
parents:
diff changeset
  4441
    MCELOGGER_ENTERFN("HandleMTMFunctionL()");
hgs
parents:
diff changeset
  4442
hgs
parents:
diff changeset
  4443
    CMsvEntrySelection* sel = NULL;
hgs
parents:
diff changeset
  4444
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  4445
        {
hgs
parents:
diff changeset
  4446
        sel = new ( ELeave ) CMsvEntrySelection();
hgs
parents:
diff changeset
  4447
        CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  4448
        sel->AppendL( iMceMainView->ListContainer()->CurrentItemId() );
hgs
parents:
diff changeset
  4449
        }
hgs
parents:
diff changeset
  4450
    else
hgs
parents:
diff changeset
  4451
        {
hgs
parents:
diff changeset
  4452
        sel = iMceListView->ListContainer()->CurrentItemSelectionRefreshL();
hgs
parents:
diff changeset
  4453
        CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  4454
        }
hgs
parents:
diff changeset
  4455
hgs
parents:
diff changeset
  4456
hgs
parents:
diff changeset
  4457
    TMsvId contextId = KMsvNullIndexEntryId;
hgs
parents:
diff changeset
  4458
    if ( aFunction.iFlags&EMtudContextSpecific )
hgs
parents:
diff changeset
  4459
        {
hgs
parents:
diff changeset
  4460
        if ( sel->Count() != 0 )
hgs
parents:
diff changeset
  4461
            {
hgs
parents:
diff changeset
  4462
            contextId = (*sel)[0];
hgs
parents:
diff changeset
  4463
            TMsvId service;
hgs
parents:
diff changeset
  4464
            TMsvEntry entry;
hgs
parents:
diff changeset
  4465
            if ( iSession->GetEntry( contextId, service, entry) != KErrNone ||
hgs
parents:
diff changeset
  4466
                entry.iMtm != aFunction.iMtmUid )
hgs
parents:
diff changeset
  4467
                {
hgs
parents:
diff changeset
  4468
                contextId = KMsvNullIndexEntryId;
hgs
parents:
diff changeset
  4469
                }
hgs
parents:
diff changeset
  4470
            }
hgs
parents:
diff changeset
  4471
        if ( contextId == KMsvNullIndexEntryId )
hgs
parents:
diff changeset
  4472
            {
hgs
parents:
diff changeset
  4473
            CleanupStack::PopAndDestroy( sel );
hgs
parents:
diff changeset
  4474
            return;
hgs
parents:
diff changeset
  4475
            }
hgs
parents:
diff changeset
  4476
        }
hgs
parents:
diff changeset
  4477
hgs
parents:
diff changeset
  4478
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  4479
hgs
parents:
diff changeset
  4480
    CBaseMtmUi& mtmUi=iMtmStore->GetMtmUiLC(aFunction.iMtmUid);
hgs
parents:
diff changeset
  4481
    CBaseMtm&   mtm=mtmUi.BaseMtm();
hgs
parents:
diff changeset
  4482
    if (aFunction.iFlags&EMtudContextSpecific)
hgs
parents:
diff changeset
  4483
        {
hgs
parents:
diff changeset
  4484
        if (mtm.HasContext())
hgs
parents:
diff changeset
  4485
            {
hgs
parents:
diff changeset
  4486
            mtm.SwitchCurrentEntryL(contextId);
hgs
parents:
diff changeset
  4487
            }
hgs
parents:
diff changeset
  4488
        else
hgs
parents:
diff changeset
  4489
            {
hgs
parents:
diff changeset
  4490
            CMsvEntry* centry=iSession->GetEntryL(contextId);
hgs
parents:
diff changeset
  4491
            mtm.SetCurrentEntryL(centry);
hgs
parents:
diff changeset
  4492
            }
hgs
parents:
diff changeset
  4493
        }
hgs
parents:
diff changeset
  4494
hgs
parents:
diff changeset
  4495
    TBool tabsToCleanupStack = EFalse;
hgs
parents:
diff changeset
  4496
hgs
parents:
diff changeset
  4497
    if ( iMceUiFlags.MceFlag( EMceUiFlagsTabsActive )
hgs
parents:
diff changeset
  4498
        && aFunction.iFuncId != KMtmUiFunctionMessageInfo )
hgs
parents:
diff changeset
  4499
        {
hgs
parents:
diff changeset
  4500
        // must remove tabs because if no mailboxes created then
hgs
parents:
diff changeset
  4501
        // mailbox settings dialog is displayed and tabs should not be shown then.
hgs
parents:
diff changeset
  4502
        RemoveTabs();
hgs
parents:
diff changeset
  4503
        CleanupStack::PushL( TCleanupItem( ShowTabs, this ) );
hgs
parents:
diff changeset
  4504
        tabsToCleanupStack = ETrue;
hgs
parents:
diff changeset
  4505
        }
hgs
parents:
diff changeset
  4506
hgs
parents:
diff changeset
  4507
    TBuf8<1> buf;
hgs
parents:
diff changeset
  4508
    if (!(aFunction.iFlags&EMtudAsynchronous))
hgs
parents:
diff changeset
  4509
        {
hgs
parents:
diff changeset
  4510
        if(aFunction.iFuncId == KMtmUiFunctionSimDialog)
hgs
parents:
diff changeset
  4511
            {
hgs
parents:
diff changeset
  4512
            iSimDialogOpen = ETrue;
hgs
parents:
diff changeset
  4513
            }
hgs
parents:
diff changeset
  4514
        mtmUi.InvokeSyncFunctionL(aFunction.iFuncId, *sel, buf);
hgs
parents:
diff changeset
  4515
        }
hgs
parents:
diff changeset
  4516
    else
hgs
parents:
diff changeset
  4517
        {
hgs
parents:
diff changeset
  4518
        CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  4519
        CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  4520
hgs
parents:
diff changeset
  4521
        CMsvOperation* op=mtmUi.InvokeAsyncFunctionL( aFunction.iFuncId, *sel,
hgs
parents:
diff changeset
  4522
            singleOpWatcher->iStatus, buf );
hgs
parents:
diff changeset
  4523
hgs
parents:
diff changeset
  4524
        if ( op )
hgs
parents:
diff changeset
  4525
            {
hgs
parents:
diff changeset
  4526
            CleanupStack::PushL( op );
hgs
parents:
diff changeset
  4527
            iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  4528
            CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  4529
            singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  4530
            MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  4531
            }
hgs
parents:
diff changeset
  4532
        else
hgs
parents:
diff changeset
  4533
            {
hgs
parents:
diff changeset
  4534
            CleanupStack::PopAndDestroy( singleOpWatcher );
hgs
parents:
diff changeset
  4535
            }
hgs
parents:
diff changeset
  4536
        }
hgs
parents:
diff changeset
  4537
hgs
parents:
diff changeset
  4538
    if ( tabsToCleanupStack )
hgs
parents:
diff changeset
  4539
        {
hgs
parents:
diff changeset
  4540
        CleanupStack::PopAndDestroy(); // TCleanupItem - will show tabs again
hgs
parents:
diff changeset
  4541
        }
hgs
parents:
diff changeset
  4542
hgs
parents:
diff changeset
  4543
    CleanupStack::PopAndDestroy(3, sel);// sel, CAknInputBlock, release mtmUi
hgs
parents:
diff changeset
  4544
hgs
parents:
diff changeset
  4545
    MCELOGGER_LEAVEFN("HandleMTMFunctionL()");
hgs
parents:
diff changeset
  4546
    }
hgs
parents:
diff changeset
  4547
hgs
parents:
diff changeset
  4548
// ----------------------------------------------------
hgs
parents:
diff changeset
  4549
// CMceUi::SetMceViewActive
hgs
parents:
diff changeset
  4550
// ----------------------------------------------------
hgs
parents:
diff changeset
  4551
void CMceUi::SetMceViewActive( TUint aActiveView )
hgs
parents:
diff changeset
  4552
    {
hgs
parents:
diff changeset
  4553
    iMceActiveView = aActiveView;
hgs
parents:
diff changeset
  4554
    if ( aActiveView & EMceDeliveryReportsViewActive )
hgs
parents:
diff changeset
  4555
        {
hgs
parents:
diff changeset
  4556
        iMceMainView->SetDeliveryReportsSelected();
hgs
parents:
diff changeset
  4557
        }
hgs
parents:
diff changeset
  4558
    }
hgs
parents:
diff changeset
  4559
hgs
parents:
diff changeset
  4560
// ----------------------------------------------------
hgs
parents:
diff changeset
  4561
// CMceUi::MceViewActive
hgs
parents:
diff changeset
  4562
// ----------------------------------------------------
hgs
parents:
diff changeset
  4563
TBool CMceUi::MceViewActive( TInt aActiveView ) const
hgs
parents:
diff changeset
  4564
    {
hgs
parents:
diff changeset
  4565
    return iMceActiveView & aActiveView;
hgs
parents:
diff changeset
  4566
    }
hgs
parents:
diff changeset
  4567
hgs
parents:
diff changeset
  4568
// ----------------------------------------------------
hgs
parents:
diff changeset
  4569
// CMceUi::MoveFromOutboxToDraftsL
hgs
parents:
diff changeset
  4570
// ----------------------------------------------------
hgs
parents:
diff changeset
  4571
void CMceUi::MoveFromOutboxToDraftsL()
hgs
parents:
diff changeset
  4572
    {
hgs
parents:
diff changeset
  4573
    MCELOGGER_ENTERFN("MoveFromOutboxToDraftsL()");
hgs
parents:
diff changeset
  4574
    __ASSERT_DEBUG( MceViewActive( EMceMessageViewActive ),
hgs
parents:
diff changeset
  4575
        Panic( EMceUiErrCannotMoveFromMainView ) );
hgs
parents:
diff changeset
  4576
hgs
parents:
diff changeset
  4577
    LeaveIfDiskSpaceUnderCriticalLevelL();
hgs
parents:
diff changeset
  4578
hgs
parents:
diff changeset
  4579
    CMsvEntrySelection* selection = iMceListView->ListContainer()
hgs
parents:
diff changeset
  4580
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  4581
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  4582
hgs
parents:
diff changeset
  4583
hgs
parents:
diff changeset
  4584
    if ( selection->Count() == 0 ||
hgs
parents:
diff changeset
  4585
         IsMessageSendingL( selection->At(0) ) )
hgs
parents:
diff changeset
  4586
        {
hgs
parents:
diff changeset
  4587
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  4588
        MCELOGGER_LEAVEFN("MoveFromOutboxToDraftsL1()");
hgs
parents:
diff changeset
  4589
        return;
hgs
parents:
diff changeset
  4590
        }
hgs
parents:
diff changeset
  4591
hgs
parents:
diff changeset
  4592
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  4593
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  4594
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  4595
hgs
parents:
diff changeset
  4596
    CMsvProgressReporterOperation* op =
hgs
parents:
diff changeset
  4597
        CMsvProgressReporterOperation::NewL(
hgs
parents:
diff changeset
  4598
        *iSession, singleOpWatcher->iStatus, EMbmAvkonQgn_note_move );
hgs
parents:
diff changeset
  4599
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  4600
hgs
parents:
diff changeset
  4601
    CMsvOperation* subOp = CMceCancelSendingOperation::NewL(
hgs
parents:
diff changeset
  4602
         *iSession,
hgs
parents:
diff changeset
  4603
         op->RequestStatus(),
hgs
parents:
diff changeset
  4604
         selection->At(0),
hgs
parents:
diff changeset
  4605
         CMceCancelSendingOperation::ECancelAndMoveToDrafts,
hgs
parents:
diff changeset
  4606
         *iMtmStore );
hgs
parents:
diff changeset
  4607
hgs
parents:
diff changeset
  4608
    op->SetOperationL(subOp); // this takes ownership immediately, so no cleanupstack needed.
hgs
parents:
diff changeset
  4609
hgs
parents:
diff changeset
  4610
    HBufC* text = StringLoader::LoadLC(
hgs
parents:
diff changeset
  4611
        R_MUIU_LOCAL_PROGRESS_MOVING_1,
hgs
parents:
diff changeset
  4612
        iEikonEnv );
hgs
parents:
diff changeset
  4613
    op->SetTitleL( *text );
hgs
parents:
diff changeset
  4614
    CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
  4615
    CleanupStack::Pop( op );
hgs
parents:
diff changeset
  4616
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  4617
    CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
  4618
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  4619
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  4620
    CleanupStack::Pop(2, singleOpWatcher); // singleOpWatcher, op
hgs
parents:
diff changeset
  4621
hgs
parents:
diff changeset
  4622
hgs
parents:
diff changeset
  4623
    MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  4624
    iMceListView->ListContainer()->ClearSelection();
hgs
parents:
diff changeset
  4625
    CleanupStack::PopAndDestroy( selection ); 
hgs
parents:
diff changeset
  4626
    MCELOGGER_LEAVEFN("MoveFromOutboxToDraftsL2()");
hgs
parents:
diff changeset
  4627
    }
hgs
parents:
diff changeset
  4628
hgs
parents:
diff changeset
  4629
// ----------------------------------------------------
hgs
parents:
diff changeset
  4630
// CMceUi::ForceMtmLoaderFinish
hgs
parents:
diff changeset
  4631
// ----------------------------------------------------
hgs
parents:
diff changeset
  4632
void CMceUi::ForceMtmLoaderFinish()
hgs
parents:
diff changeset
  4633
    {
hgs
parents:
diff changeset
  4634
    MCELOGGER_ENTERFN("ForceMtmLoaderFinish()");
hgs
parents:
diff changeset
  4635
    if ( iMtmLoader )
hgs
parents:
diff changeset
  4636
        {
hgs
parents:
diff changeset
  4637
        TRAP_IGNORE(iMtmLoader->FinishL(iAudioMsgEnabled, iPostcardEnabled)); // CR : 401-1806
hgs
parents:
diff changeset
  4638
        delete iMtmLoader;
hgs
parents:
diff changeset
  4639
        iMtmLoader = NULL;
hgs
parents:
diff changeset
  4640
        }
hgs
parents:
diff changeset
  4641
    MCELOGGER_LEAVEFN("ForceMtmLoaderFinish()");
hgs
parents:
diff changeset
  4642
    }
hgs
parents:
diff changeset
  4643
hgs
parents:
diff changeset
  4644
// ----------------------------------------------------
hgs
parents:
diff changeset
  4645
// CMceUi::GoOfflineSynchronouslyL
hgs
parents:
diff changeset
  4646
// ----------------------------------------------------
hgs
parents:
diff changeset
  4647
void CMceUi::GoOfflineSynchronouslyL( TMsvId aAccount )
hgs
parents:
diff changeset
  4648
    {
hgs
parents:
diff changeset
  4649
    MCELOGGER_ENTERFN("GoOfflineSynchronouslyL()");
hgs
parents:
diff changeset
  4650
    TMsvEntry tentry;
hgs
parents:
diff changeset
  4651
    (void)GetEntryL(aAccount, tentry);
hgs
parents:
diff changeset
  4652
hgs
parents:
diff changeset
  4653
    if (  iAlwaysOnline && ( tentry.iMtm == KSenduiMtmImap4Uid
hgs
parents:
diff changeset
  4654
        || tentry.iMtm == KSenduiMtmPop3Uid ) )
hgs
parents:
diff changeset
  4655
        {
hgs
parents:
diff changeset
  4656
        if ( !ServiceIdFound( tentry.Id()) )
hgs
parents:
diff changeset
  4657
            {
hgs
parents:
diff changeset
  4658
            // do not close always online connection
hgs
parents:
diff changeset
  4659
            return;
hgs
parents:
diff changeset
  4660
            }
hgs
parents:
diff changeset
  4661
        }
hgs
parents:
diff changeset
  4662
hgs
parents:
diff changeset
  4663
    CBaseMtmUi& ui=iMtmStore->GetMtmUiAndSetContextLC(tentry);
hgs
parents:
diff changeset
  4664
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  4665
hgs
parents:
diff changeset
  4666
    CMuiuOperationWait* wait =
hgs
parents:
diff changeset
  4667
        CMuiuOperationWait::NewLC(EActivePriorityWsEvents+10);
hgs
parents:
diff changeset
  4668
    CMsvOperation* op=ui.CloseL(wait->iStatus);
hgs
parents:
diff changeset
  4669
    wait->Start();
hgs
parents:
diff changeset
  4670
    CleanupStack::PopAndDestroy( wait );
hgs
parents:
diff changeset
  4671
    delete op;
hgs
parents:
diff changeset
  4672
    CleanupStack::PopAndDestroy( 2 ); // CAknInputBlock, release mtmui
hgs
parents:
diff changeset
  4673
    MCELOGGER_LEAVEFN("GoOfflineSynchronouslyL()");
hgs
parents:
diff changeset
  4674
    }
hgs
parents:
diff changeset
  4675
hgs
parents:
diff changeset
  4676
// ----------------------------------------------------
hgs
parents:
diff changeset
  4677
// CMceUi::IsEditorOpen
hgs
parents:
diff changeset
  4678
// ----------------------------------------------------
hgs
parents:
diff changeset
  4679
TBool CMceUi::IsEditorOpen( ) const
hgs
parents:
diff changeset
  4680
    {
hgs
parents:
diff changeset
  4681
    return ( iEditorOperation ? ETrue : EFalse );
hgs
parents:
diff changeset
  4682
    }
hgs
parents:
diff changeset
  4683
hgs
parents:
diff changeset
  4684
// ----------------------------------------------------
hgs
parents:
diff changeset
  4685
// CMceUi::LeaveIfDiskSpaceUnderCriticalLevelL
hgs
parents:
diff changeset
  4686
// Static function.
hgs
parents:
diff changeset
  4687
// Used in CreateNewMessageL as TCleanupItem.
hgs
parents:
diff changeset
  4688
// ----------------------------------------------------
hgs
parents:
diff changeset
  4689
void CMceUi::LeaveIfDiskSpaceUnderCriticalLevelL( TInt aBytesToWrite )
hgs
parents:
diff changeset
  4690
    {
hgs
parents:
diff changeset
  4691
    MCELOGGER_WRITE_FORMAT("LeaveIfDiskSpaceUnderCriticalLevelL: %d", aBytesToWrite );
hgs
parents:
diff changeset
  4692
hgs
parents:
diff changeset
  4693
hgs
parents:
diff changeset
  4694
    if ( iMceUiFlags.MceFlag( EMceUiFlagsMediaUnavailable ) )
hgs
parents:
diff changeset
  4695
        {
hgs
parents:
diff changeset
  4696
        MCELOGGER_WRITE("LeaveIfDiskSpaceUnderCriticalLevelL: media unavailable, leave");
hgs
parents:
diff changeset
  4697
        User::Leave( KMsvIndexBackup );
hgs
parents:
diff changeset
  4698
        }
hgs
parents:
diff changeset
  4699
hgs
parents:
diff changeset
  4700
    if ( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL(*iSession, aBytesToWrite) )
hgs
parents:
diff changeset
  4701
        {
hgs
parents:
diff changeset
  4702
        User::Leave( KErrDiskFull );
hgs
parents:
diff changeset
  4703
        }
hgs
parents:
diff changeset
  4704
    MCELOGGER_WRITE("LeaveIfDiskSpaceUnderCriticalLevelL: OK to proceed");
hgs
parents:
diff changeset
  4705
    }
hgs
parents:
diff changeset
  4706
hgs
parents:
diff changeset
  4707
// ----------------------------------------------------
hgs
parents:
diff changeset
  4708
// CMceUi::CancelFreeDiskSpaceRequest
hgs
parents:
diff changeset
  4709
// Static function.
hgs
parents:
diff changeset
  4710
// Used in CreateNewMessageL as TCleanupItem.
hgs
parents:
diff changeset
  4711
// ----------------------------------------------------
hgs
parents:
diff changeset
  4712
void CMceUi::CancelFreeDiskSpaceRequest(TAny* /*aAny*/)
hgs
parents:
diff changeset
  4713
    {
hgs
parents:
diff changeset
  4714
    MCELOGGER_ENTERFN("CancelFreeDiskSpaceRequest()");
hgs
parents:
diff changeset
  4715
hgs
parents:
diff changeset
  4716
// Cancel the free disk space request to be added
hgs
parents:
diff changeset
  4717
hgs
parents:
diff changeset
  4718
    MCELOGGER_LEAVEFN("CancelFreeDiskSpaceRequest()");
hgs
parents:
diff changeset
  4719
    }
hgs
parents:
diff changeset
  4720
hgs
parents:
diff changeset
  4721
// ----------------------------------------------------
hgs
parents:
diff changeset
  4722
// CMceUi::TitlePaneL
hgs
parents:
diff changeset
  4723
// Returns mce ui's title pane
hgs
parents:
diff changeset
  4724
// ----------------------------------------------------
hgs
parents:
diff changeset
  4725
CAknTitlePane* CMceUi::TitlePaneL() const
hgs
parents:
diff changeset
  4726
    {
hgs
parents:
diff changeset
  4727
    return (CAknTitlePane *)(iEikonEnv->AppUiFactory(*this))->StatusPane()->ControlL(
hgs
parents:
diff changeset
  4728
        TUid::Uid(EEikStatusPaneUidTitle));
hgs
parents:
diff changeset
  4729
    }
hgs
parents:
diff changeset
  4730
hgs
parents:
diff changeset
  4731
// ----------------------------------------------------
hgs
parents:
diff changeset
  4732
// CMceUi::IsMessageSendingL
hgs
parents:
diff changeset
  4733
//
hgs
parents:
diff changeset
  4734
// ----------------------------------------------------
hgs
parents:
diff changeset
  4735
TBool CMceUi::IsMessageSendingL( TMsvId aEntryId ) const
hgs
parents:
diff changeset
  4736
    {
hgs
parents:
diff changeset
  4737
    MCELOGGER_ENTERFN("IsMessageSendingL()");
hgs
parents:
diff changeset
  4738
    MCELOGGER_WRITE_FORMAT( "Check entry 0x%x", aEntryId );
hgs
parents:
diff changeset
  4739
hgs
parents:
diff changeset
  4740
    TBool sending = EFalse;
hgs
parents:
diff changeset
  4741
    iEntry->SetEntryL( aEntryId );
hgs
parents:
diff changeset
  4742
    const TMsvEntry& entry = iEntry->Entry();
hgs
parents:
diff changeset
  4743
    if ( entry.Parent() == KMsvGlobalOutBoxIndexEntryId &&
hgs
parents:
diff changeset
  4744
         entry.SendingState() == KMsvSendStateSending &&
hgs
parents:
diff changeset
  4745
         ( entry.iMtm == KSenduiMtmSmsUid ||
hgs
parents:
diff changeset
  4746
         entry.iMtm == KSenduiMtmMmsUid )
hgs
parents:
diff changeset
  4747
       )
hgs
parents:
diff changeset
  4748
        {
hgs
parents:
diff changeset
  4749
                sending = ETrue;
hgs
parents:
diff changeset
  4750
        }
hgs
parents:
diff changeset
  4751
    MCELOGGER_WRITE_FORMAT( "Entry sending: %d", sending);
hgs
parents:
diff changeset
  4752
    MCELOGGER_LEAVEFN("IsMessageSendingL()");
hgs
parents:
diff changeset
  4753
    return sending;
hgs
parents:
diff changeset
  4754
    }
hgs
parents:
diff changeset
  4755
hgs
parents:
diff changeset
  4756
// ----------------------------------------------------
hgs
parents:
diff changeset
  4757
// CMceUi::ActivateConnectionQueryTimerL
hgs
parents:
diff changeset
  4758
//
hgs
parents:
diff changeset
  4759
// ----------------------------------------------------
hgs
parents:
diff changeset
  4760
void CMceUi::ActivateConnectionQueryTimerL( TMsvId aEntryId )
hgs
parents:
diff changeset
  4761
    {
hgs
parents:
diff changeset
  4762
    MCELOGGER_ENTERFN("ActivateConnectionQueryTimerL()");
hgs
parents:
diff changeset
  4763
    if ( !iConnectMailboxTimer )
hgs
parents:
diff changeset
  4764
        {
hgs
parents:
diff changeset
  4765
        iConnectMailboxTimer = CMceConnectMailboxTimer::NewL( *this );
hgs
parents:
diff changeset
  4766
        }
hgs
parents:
diff changeset
  4767
hgs
parents:
diff changeset
  4768
    TMsvEntry tentry;
hgs
parents:
diff changeset
  4769
    TMsvId serviceId = GetEntryL( aEntryId, tentry );
hgs
parents:
diff changeset
  4770
    if ( tentry.iMtm != KSenduiMtmImap4Uid &&
hgs
parents:
diff changeset
  4771
         tentry.iMtm != KSenduiMtmPop3Uid )
hgs
parents:
diff changeset
  4772
        {
hgs
parents:
diff changeset
  4773
        // not mailbox, do nothing.
hgs
parents:
diff changeset
  4774
        return;
hgs
parents:
diff changeset
  4775
        }
hgs
parents:
diff changeset
  4776
hgs
parents:
diff changeset
  4777
    if ( serviceId != aEntryId )
hgs
parents:
diff changeset
  4778
        {
hgs
parents:
diff changeset
  4779
        // lets find out that service...
hgs
parents:
diff changeset
  4780
        GetEntryL( serviceId, tentry );
hgs
parents:
diff changeset
  4781
        }
hgs
parents:
diff changeset
  4782
    if ( !tentry.Connected() )
hgs
parents:
diff changeset
  4783
        {
hgs
parents:
diff changeset
  4784
        // this cancels possible old timer
hgs
parents:
diff changeset
  4785
        iConnectMailboxTimer->SetTimer( serviceId );
hgs
parents:
diff changeset
  4786
        }
hgs
parents:
diff changeset
  4787
    MCELOGGER_LEAVEFN("ActivateConnectionQueryTimerL()");
hgs
parents:
diff changeset
  4788
    }
hgs
parents:
diff changeset
  4789
hgs
parents:
diff changeset
  4790
// ----------------------------------------------------
hgs
parents:
diff changeset
  4791
// CMceUi::ReplyL
hgs
parents:
diff changeset
  4792
//
hgs
parents:
diff changeset
  4793
// ----------------------------------------------------
hgs
parents:
diff changeset
  4794
void CMceUi::ReplyL(TInt /*aReplyCommand*/)
hgs
parents:
diff changeset
  4795
    {
hgs
parents:
diff changeset
  4796
    MCELOGGER_ENTERFN("ReplyL()");
hgs
parents:
diff changeset
  4797
    LeaveIfDiskSpaceUnderCriticalLevelL( iDiskSpaceForMoveOrCopy );
hgs
parents:
diff changeset
  4798
hgs
parents:
diff changeset
  4799
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  4800
        {
hgs
parents:
diff changeset
  4801
        return;
hgs
parents:
diff changeset
  4802
        }
hgs
parents:
diff changeset
  4803
hgs
parents:
diff changeset
  4804
    CMsvEntrySelection * selection = iMceListView->ListContainer()->CurrentItemSelectionL();
hgs
parents:
diff changeset
  4805
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  4806
    if ( selection->Count() <= 0)
hgs
parents:
diff changeset
  4807
        {
hgs
parents:
diff changeset
  4808
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  4809
        return;
hgs
parents:
diff changeset
  4810
        }
hgs
parents:
diff changeset
  4811
hgs
parents:
diff changeset
  4812
    TMsvEntry entry;
hgs
parents:
diff changeset
  4813
    TMsvId serviceId;
hgs
parents:
diff changeset
  4814
    User::LeaveIfError( iSession->GetEntry(selection->At(0),serviceId,entry) ); // original message?
hgs
parents:
diff changeset
  4815
hgs
parents:
diff changeset
  4816
    // NCN reset, received mail has been replied before opening it
hgs
parents:
diff changeset
  4817
    if ( ((entry.iMtm == KSenduiMtmImap4Uid)
hgs
parents:
diff changeset
  4818
        || (entry.iMtm == KSenduiMtmPop3Uid)
hgs
parents:
diff changeset
  4819
        || (entry.iMtm == KSenduiMtmSyncMLEmailUid)
hgs
parents:
diff changeset
  4820
        || CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, entry.iMtm ))
hgs
parents:
diff changeset
  4821
        && entry.Unread() )
hgs
parents:
diff changeset
  4822
        {
hgs
parents:
diff changeset
  4823
        
hgs
parents:
diff changeset
  4824
        HandleNotif(iMceListView->ListContainer()->FolderEntry().iServiceId);
hgs
parents:
diff changeset
  4825
hgs
parents:
diff changeset
  4826
        }
hgs
parents:
diff changeset
  4827
hgs
parents:
diff changeset
  4828
    CleanupStack::PopAndDestroy( selection ); 
hgs
parents:
diff changeset
  4829
hgs
parents:
diff changeset
  4830
    TMsvPartList parts=KMsvMessagePartBody|KMsvMessagePartOriginator|KMsvMessagePartDescription;
hgs
parents:
diff changeset
  4831
hgs
parents:
diff changeset
  4832
    // Mark local entry as read before replying, remote entries should be handled by mtm ui
hgs
parents:
diff changeset
  4833
    if ( entry.Unread() && entry.iServiceId == KMsvLocalServiceIndexEntryId )
hgs
parents:
diff changeset
  4834
        {
hgs
parents:
diff changeset
  4835
        iEntry->SetEntryL( entry.Id() );
hgs
parents:
diff changeset
  4836
        TMsvEntry entry = iEntry->Entry();
hgs
parents:
diff changeset
  4837
        entry.SetUnread( EFalse );
hgs
parents:
diff changeset
  4838
        iEntry->ChangeL( entry );
hgs
parents:
diff changeset
  4839
        }
hgs
parents:
diff changeset
  4840
hgs
parents:
diff changeset
  4841
    if ( entry.iBioType == KMsgBioUidPictureMsg.iUid)
hgs
parents:
diff changeset
  4842
        {
hgs
parents:
diff changeset
  4843
        //picture message
hgs
parents:
diff changeset
  4844
        TMsvId origMsgId = entry.Id();
hgs
parents:
diff changeset
  4845
hgs
parents:
diff changeset
  4846
        // Change the MTM type of msg temporarily
hgs
parents:
diff changeset
  4847
hgs
parents:
diff changeset
  4848
        CMsvEntry* cEntry = iSession->GetEntryL( origMsgId );
hgs
parents:
diff changeset
  4849
        CleanupStack::PushL( cEntry );
hgs
parents:
diff changeset
  4850
        TMsvEntry tentry( cEntry->Entry() );
hgs
parents:
diff changeset
  4851
        const TUid origMtmUid = tentry.iMtm;
hgs
parents:
diff changeset
  4852
        tentry.iMtm = KSenduiMtmSmsUid;
hgs
parents:
diff changeset
  4853
hgs
parents:
diff changeset
  4854
        // Create registry instances
hgs
parents:
diff changeset
  4855
        CClientMtmRegistry* mtmReg = CClientMtmRegistry::NewL( *iSession );
hgs
parents:
diff changeset
  4856
        CleanupStack::PushL(mtmReg);
hgs
parents:
diff changeset
  4857
        CMtmUiRegistry* mtmUiReg = CMtmUiRegistry::NewL( *iSession );
hgs
parents:
diff changeset
  4858
        CleanupStack::PushL(mtmUiReg);
hgs
parents:
diff changeset
  4859
hgs
parents:
diff changeset
  4860
        // Create the SMS MTM
hgs
parents:
diff changeset
  4861
        CBaseMtm* mtm = mtmReg->NewMtmL( KSenduiMtmSmsUid );
hgs
parents:
diff changeset
  4862
        CleanupStack::PushL(mtm);
hgs
parents:
diff changeset
  4863
        CBaseMtmUi* mtmUi = mtmUiReg->NewMtmUiL( *mtm );
hgs
parents:
diff changeset
  4864
        CleanupStack::PushL(mtmUi);
hgs
parents:
diff changeset
  4865
hgs
parents:
diff changeset
  4866
        // Trap errors, so we can try to restore the original MTM Uid
hgs
parents:
diff changeset
  4867
hgs
parents:
diff changeset
  4868
        TRAPD(err,
hgs
parents:
diff changeset
  4869
            {
hgs
parents:
diff changeset
  4870
hgs
parents:
diff changeset
  4871
            cEntry->ChangeL( tentry );
hgs
parents:
diff changeset
  4872
hgs
parents:
diff changeset
  4873
            // Set its context
hgs
parents:
diff changeset
  4874
            mtm->SwitchCurrentEntryL( origMsgId );
hgs
parents:
diff changeset
  4875
hgs
parents:
diff changeset
  4876
            mtmUi->SetPreferences( mtmUi->Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
  4877
            CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  4878
hgs
parents:
diff changeset
  4879
            CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  4880
            CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  4881
hgs
parents:
diff changeset
  4882
            CMsvOperation* oper = mtmUi->ReplyL(
hgs
parents:
diff changeset
  4883
                KMsvDraftEntryIdValue, parts, singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  4884
            iEditorOperation = singleOpWatcher;
hgs
parents:
diff changeset
  4885
hgs
parents:
diff changeset
  4886
            CleanupStack::PushL( oper );
hgs
parents:
diff changeset
  4887
            iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  4888
            CleanupStack::Pop( 2, singleOpWatcher ); // oper
hgs
parents:
diff changeset
  4889
            singleOpWatcher->SetOperation( oper );
hgs
parents:
diff changeset
  4890
            CleanupStack::PopAndDestroy(  ); // CAknInputBlock
hgs
parents:
diff changeset
  4891
hgs
parents:
diff changeset
  4892
            });
hgs
parents:
diff changeset
  4893
hgs
parents:
diff changeset
  4894
        // Restore original Mtm Uid
hgs
parents:
diff changeset
  4895
        tentry = cEntry->Entry();
hgs
parents:
diff changeset
  4896
        tentry.iMtm = origMtmUid;
hgs
parents:
diff changeset
  4897
        cEntry->ChangeL(tentry);
hgs
parents:
diff changeset
  4898
        mtm->SwitchCurrentEntryL( origMsgId );
hgs
parents:
diff changeset
  4899
hgs
parents:
diff changeset
  4900
        User::LeaveIfError(err);
hgs
parents:
diff changeset
  4901
        CleanupStack::PopAndDestroy( 5 ); // mtmUi, mtmReg, mtmUiReg, mtm, cEntry
hgs
parents:
diff changeset
  4902
        }
hgs
parents:
diff changeset
  4903
hgs
parents:
diff changeset
  4904
    else
hgs
parents:
diff changeset
  4905
        {
hgs
parents:
diff changeset
  4906
        CBaseMtmUi& ui = iMtmStore->GetMtmUiAndSetContextLC( entry );
hgs
parents:
diff changeset
  4907
        ui.SetPreferences( ui.Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
  4908
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  4909
        CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  4910
        CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  4911
hgs
parents:
diff changeset
  4912
        CMsvOperation* oper = ui.ReplyL(
hgs
parents:
diff changeset
  4913
            KMsvDraftEntryIdValue, parts, singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  4914
        iEditorOperation = singleOpWatcher;
hgs
parents:
diff changeset
  4915
hgs
parents:
diff changeset
  4916
        CleanupStack::PushL( oper );
hgs
parents:
diff changeset
  4917
        iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  4918
        CleanupStack::Pop( 2, singleOpWatcher ); // oper
hgs
parents:
diff changeset
  4919
        singleOpWatcher->SetOperation( oper );
hgs
parents:
diff changeset
  4920
        MCELOGGER_WRITE_FORMAT("iOperations.AppendL(%d)", oper->Id() );
hgs
parents:
diff changeset
  4921
        CleanupStack::PopAndDestroy( 2 ); // CAknInputBlock, ui
hgs
parents:
diff changeset
  4922
        }
hgs
parents:
diff changeset
  4923
    MCELOGGER_LEAVEFN("ReplyL()");
hgs
parents:
diff changeset
  4924
hgs
parents:
diff changeset
  4925
    }
hgs
parents:
diff changeset
  4926
hgs
parents:
diff changeset
  4927
// ----------------------------------------------------
hgs
parents:
diff changeset
  4928
// CMceUi::MarkAsReadL
hgs
parents:
diff changeset
  4929
// ----------------------------------------------------
hgs
parents:
diff changeset
  4930
void CMceUi::MarkAsReadL( TBool aRead )
hgs
parents:
diff changeset
  4931
    {
hgs
parents:
diff changeset
  4932
    MCELOGGER_ENTERFN("MarkAsReadL()");
hgs
parents:
diff changeset
  4933
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  4934
    CleanupStack::PushL(singleOpWatcher);
hgs
parents:
diff changeset
  4935
hgs
parents:
diff changeset
  4936
    CMsvEntrySelection* sel = iMceListView->ListContainer()
hgs
parents:
diff changeset
  4937
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  4938
    CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  4939
    TInt selCount = sel->Count();
hgs
parents:
diff changeset
  4940
    if ( selCount <= 0 )
hgs
parents:
diff changeset
  4941
        {
hgs
parents:
diff changeset
  4942
        CleanupStack::PopAndDestroy( 2 ); // singleOpWatcher, sel
hgs
parents:
diff changeset
  4943
        return;
hgs
parents:
diff changeset
  4944
        }
hgs
parents:
diff changeset
  4945
hgs
parents:
diff changeset
  4946
    TMsvId serviceId;
hgs
parents:
diff changeset
  4947
    TMsvEntry entry;
hgs
parents:
diff changeset
  4948
    User::LeaveIfError( iSession->GetEntry( sel->At(0), serviceId, entry ) );
hgs
parents:
diff changeset
  4949
    CBaseMtmUi& mtmUi = iMtmStore->GetMtmUiLC( entry.iMtm );
hgs
parents:
diff changeset
  4950
    mtmUi.SetPreferences( mtmUi.Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
  4951
    CleanupStack::PopAndDestroy( ); // mtmUi
hgs
parents:
diff changeset
  4952
hgs
parents:
diff changeset
  4953
    CMsvProgressReporterOperation* op =
hgs
parents:
diff changeset
  4954
        CMsvProgressReporterOperation::NewL(
hgs
parents:
diff changeset
  4955
            *iSession, singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  4956
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  4957
    HBufC* text = StringLoader::LoadLC( R_MCE_MARK_AS_READ_PROGRESS, iEikonEnv );
hgs
parents:
diff changeset
  4958
    op->SetTitleL( *text );
hgs
parents:
diff changeset
  4959
    CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
  4960
hgs
parents:
diff changeset
  4961
    // Determine the action for unread flag
hgs
parents:
diff changeset
  4962
    TInt type =
hgs
parents:
diff changeset
  4963
            aRead ? CMceRemoveNewFlag::EMceRemoveEntryFlagUnread :
hgs
parents:
diff changeset
  4964
                    CMceRemoveNewFlag::EMceRemoveEntryFlagNew;
hgs
parents:
diff changeset
  4965
    CMceRemoveNewFlag* subOp = CMceRemoveNewFlag::NewL(
hgs
parents:
diff changeset
  4966
    type, *iSession, op->RequestStatus(), sel );
hgs
parents:
diff changeset
  4967
hgs
parents:
diff changeset
  4968
    op->SetOperationL( subOp ); // this takes ownership immediately, so no cleanupstack needed.
hgs
parents:
diff changeset
  4969
    if ( selCount ==  1 )
hgs
parents:
diff changeset
  4970
        {
hgs
parents:
diff changeset
  4971
        op->MakeProgressVisibleL(EFalse);
hgs
parents:
diff changeset
  4972
        }
hgs
parents:
diff changeset
  4973
    op->SetProgressDecoder( *subOp );
hgs
parents:
diff changeset
  4974
    CleanupStack::Pop( op );
hgs
parents:
diff changeset
  4975
hgs
parents:
diff changeset
  4976
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  4977
    CleanupStack::Pop( 2, singleOpWatcher ); // singleOpWatcher, sel
hgs
parents:
diff changeset
  4978
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  4979
    iMceListView->ListContainer()->ClearSelection();
hgs
parents:
diff changeset
  4980
    if ( CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, entry.iMtm )&& aRead )
hgs
parents:
diff changeset
  4981
        {
hgs
parents:
diff changeset
  4982
        HandleNotif(iMceListView->ListContainer()->FolderEntry().iServiceId);
hgs
parents:
diff changeset
  4983
        }
hgs
parents:
diff changeset
  4984
    MCELOGGER_WRITE_FORMAT( "iOperations.AppendL(%d)", op->Id() );
hgs
parents:
diff changeset
  4985
    MCELOGGER_LEAVEFN("MarkAsReadL()");
hgs
parents:
diff changeset
  4986
    }
hgs
parents:
diff changeset
  4987
hgs
parents:
diff changeset
  4988
// ----------------------------------------------------
hgs
parents:
diff changeset
  4989
// CMceUi::TabChangedL
hgs
parents:
diff changeset
  4990
//
hgs
parents:
diff changeset
  4991
// ----------------------------------------------------
hgs
parents:
diff changeset
  4992
void CMceUi::TabChangedL(TInt aIndex)
hgs
parents:
diff changeset
  4993
    {
hgs
parents:
diff changeset
  4994
    TBool bOBoxOrMBox = EFalse ;
hgs
parents:
diff changeset
  4995
    if ( !MceViewActive( EMceMessageViewActive )
hgs
parents:
diff changeset
  4996
        && !MceViewActive( EMceDeliveryReportsViewActive ) )
hgs
parents:
diff changeset
  4997
        {
hgs
parents:
diff changeset
  4998
        return;
hgs
parents:
diff changeset
  4999
        }
hgs
parents:
diff changeset
  5000
    if( !MceViewActive( EMceDeliveryReportsViewActive ) &&
hgs
parents:
diff changeset
  5001
            iMceListView->MarkingMode() )
hgs
parents:
diff changeset
  5002
        {
hgs
parents:
diff changeset
  5003
        return;
hgs
parents:
diff changeset
  5004
        }
hgs
parents:
diff changeset
  5005
    TInt count = iTabsArray->Count();
hgs
parents:
diff changeset
  5006
    TMsvId newId = KMsvGlobalInBoxIndexEntryId;
hgs
parents:
diff changeset
  5007
    if ( aIndex < count )
hgs
parents:
diff changeset
  5008
        {
hgs
parents:
diff changeset
  5009
        newId = (*iTabsArray)[aIndex];
hgs
parents:
diff changeset
  5010
        }
hgs
parents:
diff changeset
  5011
hgs
parents:
diff changeset
  5012
    CancelMailboxTimer();
hgs
parents:
diff changeset
  5013
hgs
parents:
diff changeset
  5014
    if ( MceViewActive( EMceDeliveryReportsViewActive ) )
hgs
parents:
diff changeset
  5015
        {
hgs
parents:
diff changeset
  5016
        OpenFolderViewL( newId );
hgs
parents:
diff changeset
  5017
        }
hgs
parents:
diff changeset
  5018
    else if ( !MceViewActive( EMceDeliveryReportsViewActive )
hgs
parents:
diff changeset
  5019
            && newId == KMceDeliveryReportsListIdValue )
hgs
parents:
diff changeset
  5020
        {
hgs
parents:
diff changeset
  5021
        // activate delivery reports view
hgs
parents:
diff changeset
  5022
        ActivateLocalViewL( KMceDeliveryReportViewId );
hgs
parents:
diff changeset
  5023
        }
hgs
parents:
diff changeset
  5024
    else
hgs
parents:
diff changeset
  5025
        {
hgs
parents:
diff changeset
  5026
        TBool bIsFromMailbox = EFalse ;
hgs
parents:
diff changeset
  5027
        TBool bIsToMailbox = EFalse ;
hgs
parents:
diff changeset
  5028
        TUid mtm = iMceListView->ListContainer()->FolderEntry().iMtm ;
hgs
parents:
diff changeset
  5029
        bIsFromMailbox = CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, mtm );
hgs
parents:
diff changeset
  5030
        
hgs
parents:
diff changeset
  5031
        TMsvEntry currentEntry;
hgs
parents:
diff changeset
  5032
        TMsvId serviceId; // not used here but needed by GetEntry function
hgs
parents:
diff changeset
  5033
        if ( iSession->GetEntry( newId, serviceId, currentEntry )
hgs
parents:
diff changeset
  5034
        	== KErrNone )
hgs
parents:
diff changeset
  5035
	        {
hgs
parents:
diff changeset
  5036
	        bIsToMailbox = CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, currentEntry.iMtm ); 	
hgs
parents:
diff changeset
  5037
	        }
hgs
parents:
diff changeset
  5038
        
hgs
parents:
diff changeset
  5039
        TMsvId oldId = iMceListView->ListContainer()->FolderEntry().Id();
hgs
parents:
diff changeset
  5040
        if (oldId == KMsvGlobalOutBoxIndexEntryId || newId == KMsvGlobalOutBoxIndexEntryId
hgs
parents:
diff changeset
  5041
            || bIsFromMailbox || bIsToMailbox)
hgs
parents:
diff changeset
  5042
	        {
hgs
parents:
diff changeset
  5043
		        if (bIsFromMailbox || bIsToMailbox || 
hgs
parents:
diff changeset
  5044
		            oldId == KMsvGlobalOutBoxIndexEntryId || iMceListView->ListContainer()->MceListId() != EMceListTypeTwoRow)
hgs
parents:
diff changeset
  5045
		        {
hgs
parents:
diff changeset
  5046
		        bOBoxOrMBox = ETrue ;
hgs
parents:
diff changeset
  5047
		        iLocalScreenClearer = CAknLocalScreenClearer::NewL( EFalse );	
hgs
parents:
diff changeset
  5048
		        }
hgs
parents:
diff changeset
  5049
	        }
hgs
parents:
diff changeset
  5050
        iMceListView->ChangeFolderAndRefreshListboxL( newId );
hgs
parents:
diff changeset
  5051
        }
hgs
parents:
diff changeset
  5052
     
hgs
parents:
diff changeset
  5053
     if (bOBoxOrMBox)
hgs
parents:
diff changeset
  5054
	     {
hgs
parents:
diff changeset
  5055
	     delete iLocalScreenClearer;
hgs
parents:
diff changeset
  5056
	     iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  5057
	     }
hgs
parents:
diff changeset
  5058
    }
hgs
parents:
diff changeset
  5059
hgs
parents:
diff changeset
  5060
// ----------------------------------------------------
hgs
parents:
diff changeset
  5061
// CMceUi::IsPresent
hgs
parents:
diff changeset
  5062
// ----------------------------------------------------
hgs
parents:
diff changeset
  5063
TBool CMceUi::IsPresent( TUid aMtm ) const
hgs
parents:
diff changeset
  5064
    {
hgs
parents:
diff changeset
  5065
    return iUiRegistry->IsPresent( aMtm );
hgs
parents:
diff changeset
  5066
    }
hgs
parents:
diff changeset
  5067
hgs
parents:
diff changeset
  5068
// ----------------------------------------------------
hgs
parents:
diff changeset
  5069
// CMceUi::ClearExitAfterDisconnectFlag
hgs
parents:
diff changeset
  5070
//
hgs
parents:
diff changeset
  5071
// ----------------------------------------------------
hgs
parents:
diff changeset
  5072
void CMceUi::ClearExitAfterDisconnectFlag( )
hgs
parents:
diff changeset
  5073
    {
hgs
parents:
diff changeset
  5074
    iMceUiFlags.ClearMceFlag( EMceUiFlagsExitAfterDisconnect  );
hgs
parents:
diff changeset
  5075
    }
hgs
parents:
diff changeset
  5076
hgs
parents:
diff changeset
  5077
// ----------------------------------------------------
hgs
parents:
diff changeset
  5078
// CMceUi::SetDontExitOnNextOperationComplete
hgs
parents:
diff changeset
  5079
//
hgs
parents:
diff changeset
  5080
// ----------------------------------------------------
hgs
parents:
diff changeset
  5081
void CMceUi::SetDontExitOnNextOperationComplete( )
hgs
parents:
diff changeset
  5082
    {
hgs
parents:
diff changeset
  5083
    MCELOGGER_WRITE("CMceUi::SetDontExitOnNextOperationComplete");
hgs
parents:
diff changeset
  5084
    iMceUiFlags.SetMceFlag( EMceUiFlagsDoNotExitAfterNextOperationComplete );
hgs
parents:
diff changeset
  5085
    if ( iCancelExitFlagOperation && !( iCancelExitFlagOperation->IsActive() ) )
hgs
parents:
diff changeset
  5086
        {
hgs
parents:
diff changeset
  5087
        iCancelExitFlagOperation->Start( 
hgs
parents:
diff changeset
  5088
            TCallBack( ClearDontExitOnNextOperationComplete, this ) );
hgs
parents:
diff changeset
  5089
        }
hgs
parents:
diff changeset
  5090
    }
hgs
parents:
diff changeset
  5091
hgs
parents:
diff changeset
  5092
// ----------------------------------------------------
hgs
parents:
diff changeset
  5093
// CMceUi::ClearDontExitOnNextOperationComplete
hgs
parents:
diff changeset
  5094
//
hgs
parents:
diff changeset
  5095
// ----------------------------------------------------
hgs
parents:
diff changeset
  5096
void CMceUi::ClearDontExitOnNextOperationComplete( )
hgs
parents:
diff changeset
  5097
    {
hgs
parents:
diff changeset
  5098
    MCELOGGER_WRITE("CMceUi::ClearDontExitOnNextOperationComplete");
hgs
parents:
diff changeset
  5099
    iMceUiFlags.ClearMceFlag( EMceUiFlagsDoNotExitAfterNextOperationComplete );
hgs
parents:
diff changeset
  5100
    }
hgs
parents:
diff changeset
  5101
hgs
parents:
diff changeset
  5102
// ----------------------------------------------------
hgs
parents:
diff changeset
  5103
// CMceUi::ClearDontExitOnNextOperationComplete
hgs
parents:
diff changeset
  5104
//
hgs
parents:
diff changeset
  5105
// ----------------------------------------------------
hgs
parents:
diff changeset
  5106
TInt CMceUi::ClearDontExitOnNextOperationComplete( TAny* aSelf )
hgs
parents:
diff changeset
  5107
    {
hgs
parents:
diff changeset
  5108
    reinterpret_cast<CMceUi*>(aSelf)->ClearDontExitOnNextOperationComplete();
hgs
parents:
diff changeset
  5109
    return KErrNone;
hgs
parents:
diff changeset
  5110
    }
hgs
parents:
diff changeset
  5111
hgs
parents:
diff changeset
  5112
// ----------------------------------------------------
hgs
parents:
diff changeset
  5113
// CMceUi::SyncMlNewMessageItemL
hgs
parents:
diff changeset
  5114
// ----------------------------------------------------
hgs
parents:
diff changeset
  5115
void CMceUi::SyncMlNewMessageItemL( const CMsvEntrySelection* aSelection, TInt aEvent )
hgs
parents:
diff changeset
  5116
    {
hgs
parents:
diff changeset
  5117
    TMsvId serviceId;
hgs
parents:
diff changeset
  5118
    TMsvEntry entry;
hgs
parents:
diff changeset
  5119
    if ( aEvent == EMsvEntriesCreated )
hgs
parents:
diff changeset
  5120
        {
hgs
parents:
diff changeset
  5121
        if ( iSession->GetEntry( aSelection->At(0), serviceId, entry ) == KErrNone )
hgs
parents:
diff changeset
  5122
            {
hgs
parents:
diff changeset
  5123
            if ( entry.iMtm == KSenduiMtmSyncMLEmailUid )
hgs
parents:
diff changeset
  5124
                {
hgs
parents:
diff changeset
  5125
                HandleMTMChangeL();
hgs
parents:
diff changeset
  5126
                }
hgs
parents:
diff changeset
  5127
            }
hgs
parents:
diff changeset
  5128
        }
hgs
parents:
diff changeset
  5129
    else
hgs
parents:
diff changeset
  5130
        {
hgs
parents:
diff changeset
  5131
        if ( aEvent == EMsvEntriesDeleted )
hgs
parents:
diff changeset
  5132
            {
hgs
parents:
diff changeset
  5133
            CMsvEntrySelection* sel=iRootEntry->ChildrenWithTypeL( KUidMsvServiceEntry );
hgs
parents:
diff changeset
  5134
            CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  5135
            const TMsvEntry* tentry=NULL;
hgs
parents:
diff changeset
  5136
            TInt syncMl = 0;
hgs
parents:
diff changeset
  5137
            for ( TInt cc=sel->Count(); --cc>=0 && !syncMl; )
hgs
parents:
diff changeset
  5138
                {
hgs
parents:
diff changeset
  5139
                tentry=&(iRootEntry->ChildDataL((*sel)[cc]));
hgs
parents:
diff changeset
  5140
                if ( tentry->iMtm == KSenduiMtmSyncMLEmailUid )
hgs
parents:
diff changeset
  5141
                    {
hgs
parents:
diff changeset
  5142
                    syncMl++;
hgs
parents:
diff changeset
  5143
                    }
hgs
parents:
diff changeset
  5144
                }
hgs
parents:
diff changeset
  5145
            if ( !syncMl )
hgs
parents:
diff changeset
  5146
                {
hgs
parents:
diff changeset
  5147
                HandleMTMChangeL();
hgs
parents:
diff changeset
  5148
                }
hgs
parents:
diff changeset
  5149
hgs
parents:
diff changeset
  5150
            CleanupStack::PopAndDestroy( sel );
hgs
parents:
diff changeset
  5151
            }
hgs
parents:
diff changeset
  5152
        }
hgs
parents:
diff changeset
  5153
    }
hgs
parents:
diff changeset
  5154
hgs
parents:
diff changeset
  5155
// ----------------------------------------------------
hgs
parents:
diff changeset
  5156
// CMceUi::SyncMlMoveFromOutboxToDraftsL
hgs
parents:
diff changeset
  5157
// ----------------------------------------------------
hgs
parents:
diff changeset
  5158
void CMceUi::SyncMlMoveFromOutboxToDraftsL( )
hgs
parents:
diff changeset
  5159
    {
hgs
parents:
diff changeset
  5160
    LeaveIfDiskSpaceUnderCriticalLevelL( iDiskSpaceForMoveOrCopy );
hgs
parents:
diff changeset
  5161
hgs
parents:
diff changeset
  5162
    __ASSERT_DEBUG( MceViewActive( EMceMessageViewActive ),
hgs
parents:
diff changeset
  5163
        Panic( EMceUiErrCannotMoveFromMainView ) );
hgs
parents:
diff changeset
  5164
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  5165
        {
hgs
parents:
diff changeset
  5166
        return;
hgs
parents:
diff changeset
  5167
        }
hgs
parents:
diff changeset
  5168
hgs
parents:
diff changeset
  5169
    const TMsvId sourceId = iMceListView->ListContainer()->CurrentFolderId();
hgs
parents:
diff changeset
  5170
    TMsvEntry srcEntry;
hgs
parents:
diff changeset
  5171
    GetEntryL( sourceId, srcEntry );
hgs
parents:
diff changeset
  5172
hgs
parents:
diff changeset
  5173
    CMsvEntrySelection * selection = iMceListView->ListContainer()
hgs
parents:
diff changeset
  5174
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  5175
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  5176
hgs
parents:
diff changeset
  5177
    if (  selection->Count() <= 0 )
hgs
parents:
diff changeset
  5178
        {
hgs
parents:
diff changeset
  5179
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  5180
        return;
hgs
parents:
diff changeset
  5181
        }
hgs
parents:
diff changeset
  5182
hgs
parents:
diff changeset
  5183
    CMsvOperation* op=NULL;
hgs
parents:
diff changeset
  5184
hgs
parents:
diff changeset
  5185
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  5186
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  5187
hgs
parents:
diff changeset
  5188
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  5189
hgs
parents:
diff changeset
  5190
    CBaseMtmUi& ui=iMtmStore->GetMtmUiAndSetContextLC( srcEntry );
hgs
parents:
diff changeset
  5191
    op=ui.MoveFromL( *selection, KMsvDraftEntryId, singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  5192
    CleanupStack::PopAndDestroy(); // release ui
hgs
parents:
diff changeset
  5193
hgs
parents:
diff changeset
  5194
    CleanupStack::PopAndDestroy(); // CAknInputBlock::NewLC()
hgs
parents:
diff changeset
  5195
    CleanupStack::PushL(op);
hgs
parents:
diff changeset
  5196
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  5197
    CleanupStack::Pop( 2 ); // singleOpWatcher, op
hgs
parents:
diff changeset
  5198
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  5199
hgs
parents:
diff changeset
  5200
    iMceListView->ListContainer()->ClearSelection();
hgs
parents:
diff changeset
  5201
    CleanupStack::PopAndDestroy( selection ); 
hgs
parents:
diff changeset
  5202
    }
hgs
parents:
diff changeset
  5203
hgs
parents:
diff changeset
  5204
// ----------------------------------------------------
hgs
parents:
diff changeset
  5205
// CMceUi::MtmName
hgs
parents:
diff changeset
  5206
//
hgs
parents:
diff changeset
  5207
// ----------------------------------------------------
hgs
parents:
diff changeset
  5208
THumanReadableName CMceUi::MtmName( TUid aMtm ) const
hgs
parents:
diff changeset
  5209
    {
hgs
parents:
diff changeset
  5210
    THumanReadableName data;
hgs
parents:
diff changeset
  5211
    const TInt count = iMsgTypesSettings.Count();
hgs
parents:
diff changeset
  5212
    for ( TInt cc = 0; cc < count; cc++ )
hgs
parents:
diff changeset
  5213
        {
hgs
parents:
diff changeset
  5214
        TUidNameInfo info = iMsgTypesSettings.At(cc);
hgs
parents:
diff changeset
  5215
        if ( info.iUid == aMtm )
hgs
parents:
diff changeset
  5216
            {
hgs
parents:
diff changeset
  5217
            data = info.iName;
hgs
parents:
diff changeset
  5218
            }
hgs
parents:
diff changeset
  5219
        }
hgs
parents:
diff changeset
  5220
    return data;
hgs
parents:
diff changeset
  5221
    }
hgs
parents:
diff changeset
  5222
hgs
parents:
diff changeset
  5223
// ----------------------------------------------------
hgs
parents:
diff changeset
  5224
// CMceUi::SetChangeMessageStore
hgs
parents:
diff changeset
  5225
//
hgs
parents:
diff changeset
  5226
// ----------------------------------------------------
hgs
parents:
diff changeset
  5227
void CMceUi::SetChangeMessageStore( TBool aChangeEnded )
hgs
parents:
diff changeset
  5228
    {
hgs
parents:
diff changeset
  5229
    if ( aChangeEnded )
hgs
parents:
diff changeset
  5230
        {
hgs
parents:
diff changeset
  5231
        iMceUiFlags.SetMceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent );
hgs
parents:
diff changeset
  5232
        }
hgs
parents:
diff changeset
  5233
    else
hgs
parents:
diff changeset
  5234
        {
hgs
parents:
diff changeset
  5235
        iMceUiFlags.ClearMceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent );
hgs
parents:
diff changeset
  5236
        }
hgs
parents:
diff changeset
  5237
    }
hgs
parents:
diff changeset
  5238
hgs
parents:
diff changeset
  5239
hgs
parents:
diff changeset
  5240
// ----------------------------------------------------
hgs
parents:
diff changeset
  5241
// CMceUi::IsSyncronizingL
hgs
parents:
diff changeset
  5242
//
hgs
parents:
diff changeset
  5243
// ----------------------------------------------------
hgs
parents:
diff changeset
  5244
TBool CMceUi::IsSyncronizingL( const TMsvEntry& entry )
hgs
parents:
diff changeset
  5245
    {
hgs
parents:
diff changeset
  5246
    TBool isSyncronizing = EFalse;
hgs
parents:
diff changeset
  5247
hgs
parents:
diff changeset
  5248
    if ( IsPresent( KSenduiMtmSyncMLEmailUid ) &&
hgs
parents:
diff changeset
  5249
            entry.iMtm == KSenduiMtmSyncMLEmailUid )
hgs
parents:
diff changeset
  5250
        {
hgs
parents:
diff changeset
  5251
        CBaseMtmUiData* uiData= GetMtmUiDataL( KSenduiMtmSyncMLEmailUid );
hgs
parents:
diff changeset
  5252
        if ( uiData )
hgs
parents:
diff changeset
  5253
            {
hgs
parents:
diff changeset
  5254
            TInt reason = 0;
hgs
parents:
diff changeset
  5255
            TBool syncronizing = uiData->CanOpenEntryL( entry, reason );
hgs
parents:
diff changeset
  5256
            if ( !syncronizing )
hgs
parents:
diff changeset
  5257
                {
hgs
parents:
diff changeset
  5258
                //cannot open during syncronizing
hgs
parents:
diff changeset
  5259
                HBufC* text = StringLoader::LoadLC( reason, iEikonEnv );
hgs
parents:
diff changeset
  5260
                CAknInformationNote* note = new (ELeave) CAknInformationNote();
hgs
parents:
diff changeset
  5261
                note->ExecuteLD(*text);
hgs
parents:
diff changeset
  5262
                CleanupStack::PopAndDestroy(); //text
hgs
parents:
diff changeset
  5263
                isSyncronizing = ETrue;
hgs
parents:
diff changeset
  5264
                }
hgs
parents:
diff changeset
  5265
            }
hgs
parents:
diff changeset
  5266
        }
hgs
parents:
diff changeset
  5267
hgs
parents:
diff changeset
  5268
    return isSyncronizing;
hgs
parents:
diff changeset
  5269
    }
hgs
parents:
diff changeset
  5270
hgs
parents:
diff changeset
  5271
// ----------------------------------------------------
hgs
parents:
diff changeset
  5272
// CMceUi::AlwaysOnlineLastConnectionL
hgs
parents:
diff changeset
  5273
//
hgs
parents:
diff changeset
  5274
// ----------------------------------------------------
hgs
parents:
diff changeset
  5275
TBool CMceUi::AlwaysOnlineLastConnectionL( const TMsvId aAccount )
hgs
parents:
diff changeset
  5276
    {
hgs
parents:
diff changeset
  5277
    TBool connectionMade = ETrue;
hgs
parents:
diff changeset
  5278
hgs
parents:
diff changeset
  5279
    CImumInSettingsData* settings =
hgs
parents:
diff changeset
  5280
        iEmailApi->MailboxServicesL().LoadMailboxSettingsL( aAccount );
hgs
parents:
diff changeset
  5281
    CleanupStack::PushL( settings );
hgs
parents:
diff changeset
  5282
hgs
parents:
diff changeset
  5283
    if ( iMceMainView->ListContainer()->ListItems()->
hgs
parents:
diff changeset
  5284
        AlwaysOnlineAccountL( aAccount, *settings ) )
hgs
parents:
diff changeset
  5285
        {
hgs
parents:
diff changeset
  5286
        TInt lastUpdateFailed = 0;
hgs
parents:
diff changeset
  5287
        settings->GetAttr(
hgs
parents:
diff changeset
  5288
            TImumInSettings::EKeyInfoLastUpdateFailed, lastUpdateFailed );
hgs
parents:
diff changeset
  5289
        if ( lastUpdateFailed )
hgs
parents:
diff changeset
  5290
            {
hgs
parents:
diff changeset
  5291
            TInt64 lastTime = 0;
hgs
parents:
diff changeset
  5292
            settings->GetAttr(
hgs
parents:
diff changeset
  5293
                TImumInSettings::EKeyInfoLastSuccessfulUpdate, lastTime );
hgs
parents:
diff changeset
  5294
            TTime settingsTime( lastTime );
hgs
parents:
diff changeset
  5295
            TBuf<KMceMaxDateString> time;
hgs
parents:
diff changeset
  5296
            TBuf<KMceMaxDateString> dateTime;
hgs
parents:
diff changeset
  5297
hgs
parents:
diff changeset
  5298
            HBufC* timeFormat = iCoeEnv->
hgs
parents:
diff changeset
  5299
                AllocReadResourceLC( R_QTN_TIME_USUAL_WITH_ZERO );
hgs
parents:
diff changeset
  5300
            HBufC* dateFormat = iCoeEnv->
hgs
parents:
diff changeset
  5301
                AllocReadResourceLC( R_QTN_DATE_USUAL_WITH_ZERO );
hgs
parents:
diff changeset
  5302
hgs
parents:
diff changeset
  5303
            TTime currentTime;
hgs
parents:
diff changeset
  5304
            currentTime.HomeTime();
hgs
parents:
diff changeset
  5305
            TDateTime currentDate( currentTime.DateTime() ); //current date
hgs
parents:
diff changeset
  5306
            TDateTime currentDateSettings( settingsTime.DateTime() ); //settings date
hgs
parents:
diff changeset
  5307
hgs
parents:
diff changeset
  5308
            TBool connBeforeToday = EFalse;
hgs
parents:
diff changeset
  5309
            if ( currentDate.Year() > currentDateSettings.Year() )
hgs
parents:
diff changeset
  5310
                {
hgs
parents:
diff changeset
  5311
                connBeforeToday = ETrue;
hgs
parents:
diff changeset
  5312
                }
hgs
parents:
diff changeset
  5313
            else
hgs
parents:
diff changeset
  5314
                if ( currentDate.Month() > currentDateSettings.Month() )
hgs
parents:
diff changeset
  5315
                    {
hgs
parents:
diff changeset
  5316
                    connBeforeToday = ETrue;
hgs
parents:
diff changeset
  5317
                    }
hgs
parents:
diff changeset
  5318
            else
hgs
parents:
diff changeset
  5319
                if ( currentDate.Day() > currentDateSettings.Day() )
hgs
parents:
diff changeset
  5320
                    {
hgs
parents:
diff changeset
  5321
                    connBeforeToday = ETrue;
hgs
parents:
diff changeset
  5322
                    }
hgs
parents:
diff changeset
  5323
hgs
parents:
diff changeset
  5324
            settingsTime.FormatL( time, *timeFormat );
hgs
parents:
diff changeset
  5325
            AknTextUtils::LanguageSpecificNumberConversion( time );
hgs
parents:
diff changeset
  5326
hgs
parents:
diff changeset
  5327
            settingsTime.FormatL( dateTime, *dateFormat );
hgs
parents:
diff changeset
  5328
            AknTextUtils::LanguageSpecificNumberConversion( dateTime );
hgs
parents:
diff changeset
  5329
            CleanupStack::PopAndDestroy( 2, timeFormat ); // timeFormat, dateFormat
hgs
parents:
diff changeset
  5330
hgs
parents:
diff changeset
  5331
            CAknQueryDialog* confDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  5332
            HBufC* text = NULL;
hgs
parents:
diff changeset
  5333
            if ( connBeforeToday ) //last connection failed before today
hgs
parents:
diff changeset
  5334
                {
hgs
parents:
diff changeset
  5335
                CDesCArrayFlat* string=new(ELeave)CDesCArrayFlat( KMceArrayGranularity );
hgs
parents:
diff changeset
  5336
                CleanupStack::PushL( string );
hgs
parents:
diff changeset
  5337
                string->AppendL( dateTime );
hgs
parents:
diff changeset
  5338
                string->AppendL( time );
hgs
parents:
diff changeset
  5339
                text = StringLoader::LoadLC(
hgs
parents:
diff changeset
  5340
                    R_MCE_SETTINGS_ALWAYS_LASTTIME2, *string, iEikonEnv );
hgs
parents:
diff changeset
  5341
                }
hgs
parents:
diff changeset
  5342
            else
hgs
parents:
diff changeset
  5343
                {
hgs
parents:
diff changeset
  5344
                text = StringLoader::LoadLC(
hgs
parents:
diff changeset
  5345
                    R_MCE_SETTINGS_ALWAYS_LASTTIME, time, iEikonEnv );
hgs
parents:
diff changeset
  5346
                }
hgs
parents:
diff changeset
  5347
hgs
parents:
diff changeset
  5348
            confDialog->SetPromptL( *text );
hgs
parents:
diff changeset
  5349
            CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
  5350
            if ( connBeforeToday ) //last connection failed before today
hgs
parents:
diff changeset
  5351
                {
hgs
parents:
diff changeset
  5352
                CleanupStack::PopAndDestroy(); 
hgs
parents:
diff changeset
  5353
                }
hgs
parents:
diff changeset
  5354
hgs
parents:
diff changeset
  5355
            connectionMade = EFalse;
hgs
parents:
diff changeset
  5356
hgs
parents:
diff changeset
  5357
            if ( confDialog->ExecuteLD( R_MCE_CONFIRMATION ) )
hgs
parents:
diff changeset
  5358
                {
hgs
parents:
diff changeset
  5359
                GoOnlineL( aAccount );
hgs
parents:
diff changeset
  5360
                }
hgs
parents:
diff changeset
  5361
hgs
parents:
diff changeset
  5362
            }
hgs
parents:
diff changeset
  5363
        }
hgs
parents:
diff changeset
  5364
hgs
parents:
diff changeset
  5365
    CleanupStack::PopAndDestroy( 1 ); // extendedMailSettings
hgs
parents:
diff changeset
  5366
    return connectionMade;
hgs
parents:
diff changeset
  5367
    }
hgs
parents:
diff changeset
  5368
hgs
parents:
diff changeset
  5369
// ----------------------------------------------------
hgs
parents:
diff changeset
  5370
// CMceUi::AddOperationIdL
hgs
parents:
diff changeset
  5371
//
hgs
parents:
diff changeset
  5372
// ----------------------------------------------------
hgs
parents:
diff changeset
  5373
void CMceUi::AddOperationIdL( const TMsvOp& aOp, const TMsvId& aServiceId )
hgs
parents:
diff changeset
  5374
    {
hgs
parents:
diff changeset
  5375
    if ( !iMailAccountItemArray )
hgs
parents:
diff changeset
  5376
        {
hgs
parents:
diff changeset
  5377
        return;
hgs
parents:
diff changeset
  5378
        }
hgs
parents:
diff changeset
  5379
hgs
parents:
diff changeset
  5380
    TInt count = iMailAccountItemArray->Count();
hgs
parents:
diff changeset
  5381
    TInt found = EFalse;
hgs
parents:
diff changeset
  5382
    for ( TInt cc = 0; cc < count && !found; cc++ )
hgs
parents:
diff changeset
  5383
        {
hgs
parents:
diff changeset
  5384
        const TMceMailAccountItem& item = ((*iMailAccountItemArray)[cc]);
hgs
parents:
diff changeset
  5385
        if ( item.iServiceId == aServiceId )
hgs
parents:
diff changeset
  5386
            {
hgs
parents:
diff changeset
  5387
            ((*iMailAccountItemArray)[cc]).iMceConnection = ETrue;
hgs
parents:
diff changeset
  5388
            ((*iMailAccountItemArray)[cc]).iOp = aOp;
hgs
parents:
diff changeset
  5389
            found = ETrue;
hgs
parents:
diff changeset
  5390
            }
hgs
parents:
diff changeset
  5391
        }
hgs
parents:
diff changeset
  5392
    if ( !found )
hgs
parents:
diff changeset
  5393
        {
hgs
parents:
diff changeset
  5394
        TMceMailAccountItem item;
hgs
parents:
diff changeset
  5395
        item.iServiceId = aServiceId;
hgs
parents:
diff changeset
  5396
        item.iMceConnection = ETrue;
hgs
parents:
diff changeset
  5397
        item.iOp = aOp;
hgs
parents:
diff changeset
  5398
        iMailAccountItemArray->AppendL( item );
hgs
parents:
diff changeset
  5399
        }
hgs
parents:
diff changeset
  5400
    }
hgs
parents:
diff changeset
  5401
hgs
parents:
diff changeset
  5402
// ----------------------------------------------------
hgs
parents:
diff changeset
  5403
// CMceUi::RemoveOperationId
hgs
parents:
diff changeset
  5404
//
hgs
parents:
diff changeset
  5405
// ----------------------------------------------------
hgs
parents:
diff changeset
  5406
void CMceUi::RemoveOperationId( const TMsvId& /*aOpId*/, const TMsvId& aServiceId )
hgs
parents:
diff changeset
  5407
    {
hgs
parents:
diff changeset
  5408
    if ( !iMailAccountItemArray )
hgs
parents:
diff changeset
  5409
        {
hgs
parents:
diff changeset
  5410
        return;
hgs
parents:
diff changeset
  5411
        }
hgs
parents:
diff changeset
  5412
hgs
parents:
diff changeset
  5413
    TInt count = iMailAccountItemArray->Count();
hgs
parents:
diff changeset
  5414
hgs
parents:
diff changeset
  5415
    for ( TInt loop=count-1; loop>=0; loop-- )
hgs
parents:
diff changeset
  5416
        {
hgs
parents:
diff changeset
  5417
        TMceMailAccountItem item = ((*iMailAccountItemArray)[loop]);
hgs
parents:
diff changeset
  5418
        if ( item.iServiceId == aServiceId )
hgs
parents:
diff changeset
  5419
            {
hgs
parents:
diff changeset
  5420
            iMailAccountItemArray->Delete( loop );
hgs
parents:
diff changeset
  5421
            break;
hgs
parents:
diff changeset
  5422
            }
hgs
parents:
diff changeset
  5423
        }
hgs
parents:
diff changeset
  5424
    }
hgs
parents:
diff changeset
  5425
hgs
parents:
diff changeset
  5426
// ----------------------------------------------------
hgs
parents:
diff changeset
  5427
// CMceUi::ServiceIdFound
hgs
parents:
diff changeset
  5428
//
hgs
parents:
diff changeset
  5429
// ----------------------------------------------------
hgs
parents:
diff changeset
  5430
TBool CMceUi::ServiceIdFound( const TMsvId& aServiceId )
hgs
parents:
diff changeset
  5431
    {
hgs
parents:
diff changeset
  5432
    TInt found = EFalse;
hgs
parents:
diff changeset
  5433
hgs
parents:
diff changeset
  5434
    TInt count = iMailAccountItemArray->Count();
hgs
parents:
diff changeset
  5435
hgs
parents:
diff changeset
  5436
    for ( TInt cc = 0; cc < count && !found; cc++ )
hgs
parents:
diff changeset
  5437
        {
hgs
parents:
diff changeset
  5438
        TMceMailAccountItem item = ((*iMailAccountItemArray)[cc]);
hgs
parents:
diff changeset
  5439
        if ( item.iServiceId == aServiceId && item.iMceConnection  )
hgs
parents:
diff changeset
  5440
            {
hgs
parents:
diff changeset
  5441
            found = ETrue;
hgs
parents:
diff changeset
  5442
            }
hgs
parents:
diff changeset
  5443
        }
hgs
parents:
diff changeset
  5444
    return found;
hgs
parents:
diff changeset
  5445
    }
hgs
parents:
diff changeset
  5446
hgs
parents:
diff changeset
  5447
// ----------------------------------------------------
hgs
parents:
diff changeset
  5448
// CMceUi::AlwaysOnline
hgs
parents:
diff changeset
  5449
//
hgs
parents:
diff changeset
  5450
// ----------------------------------------------------
hgs
parents:
diff changeset
  5451
TBool CMceUi::AlwaysOnline( )
hgs
parents:
diff changeset
  5452
    {    
hgs
parents:
diff changeset
  5453
    return iAlwaysOnline;
hgs
parents:
diff changeset
  5454
    }
hgs
parents:
diff changeset
  5455
hgs
parents:
diff changeset
  5456
// ----------------------------------------------------
hgs
parents:
diff changeset
  5457
// CMceUi::IsMessageSetToBeDeletedFromServer
hgs
parents:
diff changeset
  5458
//
hgs
parents:
diff changeset
  5459
// ----------------------------------------------------
hgs
parents:
diff changeset
  5460
TBool CMceUi::IsMailSetToBeDeletedFromServerL( TMsvId aItemId )
hgs
parents:
diff changeset
  5461
    {
hgs
parents:
diff changeset
  5462
    TInt rid = 0;
hgs
parents:
diff changeset
  5463
    TBool ret = EFalse;
hgs
parents:
diff changeset
  5464
    TMsvId serviceId;
hgs
parents:
diff changeset
  5465
    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  5466
hgs
parents:
diff changeset
  5467
    iSession->GetEntry( aItemId, serviceId, currentEntry );
hgs
parents:
diff changeset
  5468
hgs
parents:
diff changeset
  5469
    CBaseMtmUiData* mtmUiData = GetMtmUiDataL( currentEntry.iMtm );
hgs
parents:
diff changeset
  5470
hgs
parents:
diff changeset
  5471
    if ( mtmUiData && mtmUiData->CanUnDeleteFromEntryL( currentEntry, rid ) )
hgs
parents:
diff changeset
  5472
        {
hgs
parents:
diff changeset
  5473
        ret = ETrue;
hgs
parents:
diff changeset
  5474
        }
hgs
parents:
diff changeset
  5475
hgs
parents:
diff changeset
  5476
    return ret;
hgs
parents:
diff changeset
  5477
    }
hgs
parents:
diff changeset
  5478
hgs
parents:
diff changeset
  5479
// ----------------------------------------------------
hgs
parents:
diff changeset
  5480
// CMceUi::AnchoredItem
hgs
parents:
diff changeset
  5481
//
hgs
parents:
diff changeset
  5482
// ----------------------------------------------------
hgs
parents:
diff changeset
  5483
//
hgs
parents:
diff changeset
  5484
void CMceUi::DefineAnchorIdL( const CMsvEntrySelection* /*aSelection*/ )
hgs
parents:
diff changeset
  5485
    {
hgs
parents:
diff changeset
  5486
#if 0    
hgs
parents:
diff changeset
  5487
    if ( IsMailSetToBeDeletedFromServerL() )
hgs
parents:
diff changeset
  5488
        {
hgs
parents:
diff changeset
  5489
        SetAnchorId( iMceListView->ListContainer()->CurrentItemId() );
hgs
parents:
diff changeset
  5490
        return;
hgs
parents:
diff changeset
  5491
        }
hgs
parents:
diff changeset
  5492
    // TODO
hgs
parents:
diff changeset
  5493
    TInt currentItem = iMceListView->ListContainer()->CurrentItemIndex();
hgs
parents:
diff changeset
  5494
    CMceMessageListItemArray* items = iMceListView->ListContainer()->ListItems();
hgs
parents:
diff changeset
  5495
    iAnchorId = NULL;
hgs
parents:
diff changeset
  5496
    
hgs
parents:
diff changeset
  5497
// Do not change the focus if mailbox is offline and currently selected item is set to be deleted from server
hgs
parents:
diff changeset
  5498
    if ( IsMailSetToBeDeletedFromServerL() )
hgs
parents:
diff changeset
  5499
        {
hgs
parents:
diff changeset
  5500
        SetAnchorId( iMceListView->ListContainer()->CurrentItemId() );
hgs
parents:
diff changeset
  5501
        return;
hgs
parents:
diff changeset
  5502
        }
hgs
parents:
diff changeset
  5503
    
hgs
parents:
diff changeset
  5504
    for ( TInt i = currentItem; i < items->MdcaCount(); i++ ) // Find forwards
hgs
parents:
diff changeset
  5505
        {
hgs
parents:
diff changeset
  5506
        if ( aSelection->Find( items->ItemId( i ) ) == KErrNotFound )
hgs
parents:
diff changeset
  5507
            {
hgs
parents:
diff changeset
  5508
            SetAnchorId( items->ItemId( i ) );
hgs
parents:
diff changeset
  5509
            break;
hgs
parents:
diff changeset
  5510
            }
hgs
parents:
diff changeset
  5511
        }
hgs
parents:
diff changeset
  5512
hgs
parents:
diff changeset
  5513
    if ( !iAnchorId ) // If not found in forward search, find backwards
hgs
parents:
diff changeset
  5514
        {
hgs
parents:
diff changeset
  5515
        for ( TInt i = currentItem; i >= 0; i-- )
hgs
parents:
diff changeset
  5516
            {
hgs
parents:
diff changeset
  5517
            if ( aSelection->Find( items->ItemId( i ) ) == KErrNotFound )
hgs
parents:
diff changeset
  5518
                {
hgs
parents:
diff changeset
  5519
                SetAnchorId( items->ItemId( i ) );
hgs
parents:
diff changeset
  5520
                break;
hgs
parents:
diff changeset
  5521
                }
hgs
parents:
diff changeset
  5522
            }
hgs
parents:
diff changeset
  5523
        }
hgs
parents:
diff changeset
  5524
#endif        
hgs
parents:
diff changeset
  5525
    }
hgs
parents:
diff changeset
  5526
hgs
parents:
diff changeset
  5527
// ----------------------------------------------------
hgs
parents:
diff changeset
  5528
// CMceUi::AnchoredItem
hgs
parents:
diff changeset
  5529
//
hgs
parents:
diff changeset
  5530
// ----------------------------------------------------
hgs
parents:
diff changeset
  5531
TMsvId CMceUi::AnchoredItem()
hgs
parents:
diff changeset
  5532
    {
hgs
parents:
diff changeset
  5533
    return iAnchorId;
hgs
parents:
diff changeset
  5534
    }
hgs
parents:
diff changeset
  5535
hgs
parents:
diff changeset
  5536
// ----------------------------------------------------
hgs
parents:
diff changeset
  5537
// CMceUi::SetAnchorId
hgs
parents:
diff changeset
  5538
//
hgs
parents:
diff changeset
  5539
// ----------------------------------------------------
hgs
parents:
diff changeset
  5540
void CMceUi::SetAnchorId( TMsvId aAnchorId )
hgs
parents:
diff changeset
  5541
    {
hgs
parents:
diff changeset
  5542
    iAnchorId = aAnchorId;
hgs
parents:
diff changeset
  5543
    }
hgs
parents:
diff changeset
  5544
hgs
parents:
diff changeset
  5545
// ----------------------------------------------------
hgs
parents:
diff changeset
  5546
// CMceUi::EventL
hgs
parents:
diff changeset
  5547
//
hgs
parents:
diff changeset
  5548
// ----------------------------------------------------
hgs
parents:
diff changeset
  5549
void CMceUi::EventL( const CConnMonEventBase &aConnMonEvent )
hgs
parents:
diff changeset
  5550
    {
hgs
parents:
diff changeset
  5551
    switch ( aConnMonEvent.EventType() )
hgs
parents:
diff changeset
  5552
        {
hgs
parents:
diff changeset
  5553
        case EConnMonNetworkRegistrationChange:
hgs
parents:
diff changeset
  5554
            {
hgs
parents:
diff changeset
  5555
            CConnMonNetworkRegistrationChange* event =
hgs
parents:
diff changeset
  5556
                ( CConnMonNetworkRegistrationChange* ) &aConnMonEvent;                
hgs
parents:
diff changeset
  5557
            
hgs
parents:
diff changeset
  5558
            if ( iMceMainView->ListContainer() ) // Cannot set roaming if ListContainer is empty
hgs
parents:
diff changeset
  5559
                {
hgs
parents:
diff changeset
  5560
                CMceMainViewListItemArray* array = iMceMainView->ListContainer()->ListItems();
hgs
parents:
diff changeset
  5561
                if ( array && (array->Count() > 0) ) // List item array should not be empty
hgs
parents:
diff changeset
  5562
                    {
hgs
parents:
diff changeset
  5563
                    // Set roaming status
hgs
parents:
diff changeset
  5564
                    array->SetRoaming( event->RegistrationStatus() == ENetworkRegistrationRoaming );
hgs
parents:
diff changeset
  5565
                    
hgs
parents:
diff changeset
  5566
                    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  5567
                        {
hgs
parents:
diff changeset
  5568
                        //update icon only if main view is open
hgs
parents:
diff changeset
  5569
                        iMceMainView->ListContainer()->DrawDeferred();
hgs
parents:
diff changeset
  5570
                        }
hgs
parents:
diff changeset
  5571
                    }
hgs
parents:
diff changeset
  5572
                }
hgs
parents:
diff changeset
  5573
            }
hgs
parents:
diff changeset
  5574
            break;
hgs
parents:
diff changeset
  5575
hgs
parents:
diff changeset
  5576
        default:
hgs
parents:
diff changeset
  5577
            break;
hgs
parents:
diff changeset
  5578
        }
hgs
parents:
diff changeset
  5579
    }
hgs
parents:
diff changeset
  5580
// ----------------------------------------------------
hgs
parents:
diff changeset
  5581
// CMceUi::HandleGainingForeground
hgs
parents:
diff changeset
  5582
//
hgs
parents:
diff changeset
  5583
// ----------------------------------------------------
hgs
parents:
diff changeset
  5584
void CMceUi::HandleGainingForeground() // CR : 401-1806
hgs
parents:
diff changeset
  5585
    {
hgs
parents:
diff changeset
  5586
   
hgs
parents:
diff changeset
  5587
    // This code is added to remove screen clearer when returning from viewer.
hgs
parents:
diff changeset
  5588
    if ( iMceListView )
hgs
parents:
diff changeset
  5589
        {
hgs
parents:
diff changeset
  5590
        CAknLocalScreenClearer** localScreenClearer = NULL; 
hgs
parents:
diff changeset
  5591
        iMceListView->GetLocalScreenClearer( localScreenClearer );
hgs
parents:
diff changeset
  5592
        delete *localScreenClearer;
hgs
parents:
diff changeset
  5593
        *localScreenClearer = NULL;// this will assign null to iLocalScreenClearer in messagelistview.
hgs
parents:
diff changeset
  5594
        }
hgs
parents:
diff changeset
  5595
    if ( !iFeatureMgrEnabled )
hgs
parents:
diff changeset
  5596
        {
hgs
parents:
diff changeset
  5597
  	    TRAP_IGNORE( FeatureManager::InitializeLibL() );
hgs
parents:
diff changeset
  5598
  	    iFeatureMgrEnabled = ETrue ;
hgs
parents:
diff changeset
  5599
        }
hgs
parents:
diff changeset
  5600
  	TBool newPostcardVal = EFalse;
hgs
parents:
diff changeset
  5601
    TBool newAudioMsgVal = EFalse;
hgs
parents:
diff changeset
  5602
    newAudioMsgVal = FeatureManager::FeatureSupported( KFeatureIdAudioMessaging );
hgs
parents:
diff changeset
  5603
    newPostcardVal = FeatureManager::FeatureSupported( KFeatureIdMmsPostcard );
hgs
parents:
diff changeset
  5604
    
hgs
parents:
diff changeset
  5605
    if ( newAudioMsgVal != iAudioMsgEnabled || newPostcardVal != iPostcardEnabled )
hgs
parents:
diff changeset
  5606
        {
hgs
parents:
diff changeset
  5607
        TRAP_IGNORE( HandleMTMChangeL() );
hgs
parents:
diff changeset
  5608
        }
hgs
parents:
diff changeset
  5609
    
hgs
parents:
diff changeset
  5610
    if ( MceViewActive( EMceMainViewActive ) && iIadUpdateVal)
hgs
parents:
diff changeset
  5611
        {      
hgs
parents:
diff changeset
  5612
        if(!iMceIAUpdate) // first time messaging view is activated
hgs
parents:
diff changeset
  5613
            {
hgs
parents:
diff changeset
  5614
            TRAP_IGNORE(iMceIAUpdate = CMceIAUpdateUtils::NewL(*this));     
hgs
parents:
diff changeset
  5615
            if(iMceIAUpdate)
hgs
parents:
diff changeset
  5616
                {
hgs
parents:
diff changeset
  5617
                CheckIAUpdate();
hgs
parents:
diff changeset
  5618
                }
hgs
parents:
diff changeset
  5619
            }
hgs
parents:
diff changeset
  5620
        else
hgs
parents:
diff changeset
  5621
            {
hgs
parents:
diff changeset
  5622
            if(iMceIAUpdate->IsUpdateRequired())
hgs
parents:
diff changeset
  5623
                {
hgs
parents:
diff changeset
  5624
                CheckIAUpdate();
hgs
parents:
diff changeset
  5625
                }
hgs
parents:
diff changeset
  5626
            }
hgs
parents:
diff changeset
  5627
        }
hgs
parents:
diff changeset
  5628
    }
hgs
parents:
diff changeset
  5629
hgs
parents:
diff changeset
  5630
// ----------------------------------------------------
hgs
parents:
diff changeset
  5631
// CMceUi::HandleLosingForeground
hgs
parents:
diff changeset
  5632
//
hgs
parents:
diff changeset
  5633
// ----------------------------------------------------
hgs
parents:
diff changeset
  5634
void CMceUi::HandleLosingForeground() // CR : 401-1806
hgs
parents:
diff changeset
  5635
    {
hgs
parents:
diff changeset
  5636
    iAudioMsgEnabled = FeatureManager::FeatureSupported( KFeatureIdAudioMessaging );
hgs
parents:
diff changeset
  5637
    iPostcardEnabled = FeatureManager::FeatureSupported( KFeatureIdMmsPostcard ) ;
hgs
parents:
diff changeset
  5638
    if ( iFeatureMgrEnabled ) 
hgs
parents:
diff changeset
  5639
        {
hgs
parents:
diff changeset
  5640
  	    FeatureManager::UnInitializeLib() ;
hgs
parents:
diff changeset
  5641
  	    iFeatureMgrEnabled = EFalse ;
hgs
parents:
diff changeset
  5642
  	    }
hgs
parents:
diff changeset
  5643
  	}
hgs
parents:
diff changeset
  5644
    
hgs
parents:
diff changeset
  5645
// ----------------------------------------------------
hgs
parents:
diff changeset
  5646
// CMceUi::ToPhoneMemoryQueryL
hgs
parents:
diff changeset
  5647
//
hgs
parents:
diff changeset
  5648
// ----------------------------------------------------
hgs
parents:
diff changeset
  5649
void CMceUi::ToPhoneMemoryQueryL( TBool aShowQuery )
hgs
parents:
diff changeset
  5650
    {
hgs
parents:
diff changeset
  5651
hgs
parents:
diff changeset
  5652
    if ( iPhoneMemoryQuery )
hgs
parents:
diff changeset
  5653
        {
hgs
parents:
diff changeset
  5654
        // If the dialog for whitching the message store is allready visible,
hgs
parents:
diff changeset
  5655
        // dismiss it
hgs
parents:
diff changeset
  5656
        delete iPhoneMemoryQuery;
hgs
parents:
diff changeset
  5657
        iPhoneMemoryQuery = NULL;
hgs
parents:
diff changeset
  5658
        return;
hgs
parents:
diff changeset
  5659
        }
hgs
parents:
diff changeset
  5660
hgs
parents:
diff changeset
  5661
    //this method is run when message centre is started
hgs
parents:
diff changeset
  5662
    if ( iMemoryInUse && !iMessageStoreExist && aShowQuery )
hgs
parents:
diff changeset
  5663
        {
hgs
parents:
diff changeset
  5664
        // check, if message store was in MMC but message server has
hgs
parents:
diff changeset
  5665
        // automatically changed message store to phone memory
hgs
parents:
diff changeset
  5666
        RFs& fs=iEikonEnv->FsSession();
hgs
parents:
diff changeset
  5667
        iMessageStoreExist = ETrue;
hgs
parents:
diff changeset
  5668
        TInt currentDrive = EDriveC;
hgs
parents:
diff changeset
  5669
        currentDrive = TInt(iSession->CurrentDriveL());
hgs
parents:
diff changeset
  5670
hgs
parents:
diff changeset
  5671
        TInt i = EDriveC;
hgs
parents:
diff changeset
  5672
hgs
parents:
diff changeset
  5673
        CRepository* repository = NULL;
hgs
parents:
diff changeset
  5674
        TRAPD( ret, repository = CRepository::NewL(KCRUidMuiuSettings) );
hgs
parents:
diff changeset
  5675
hgs
parents:
diff changeset
  5676
        if ( ret == KErrNone )
hgs
parents:
diff changeset
  5677
            {
hgs
parents:
diff changeset
  5678
            CleanupStack::PushL( repository );
hgs
parents:
diff changeset
  5679
            if ( repository->Get(KMuiuMemoryInUse,i) != KErrNone )
hgs
parents:
diff changeset
  5680
                {
hgs
parents:
diff changeset
  5681
                i = EDriveC;
hgs
parents:
diff changeset
  5682
                }
hgs
parents:
diff changeset
  5683
            if ( i != EDriveC && currentDrive == EDriveC )
hgs
parents:
diff changeset
  5684
                {
hgs
parents:
diff changeset
  5685
                // message server has changed the store automatically
hgs
parents:
diff changeset
  5686
                iMessageStoreExist = EFalse;
hgs
parents:
diff changeset
  5687
                }
hgs
parents:
diff changeset
  5688
            }
hgs
parents:
diff changeset
  5689
hgs
parents:
diff changeset
  5690
        if ( !iMessageStoreExist )
hgs
parents:
diff changeset
  5691
            {
hgs
parents:
diff changeset
  5692
            // message store was in MMC, but now there is no MMC
hgs
parents:
diff changeset
  5693
            iPhoneMemoryQuery = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  5694
            iPhoneMemoryQuery->ExecuteLD( R_MCE_MEMC_NOTE );
hgs
parents:
diff changeset
  5695
            iPhoneMemoryQuery = NULL; // ExecuteLD deletes the object
hgs
parents:
diff changeset
  5696
            }
hgs
parents:
diff changeset
  5697
        iMessageStoreExist = ETrue;
hgs
parents:
diff changeset
  5698
hgs
parents:
diff changeset
  5699
        if ( ret == KErrNone )
hgs
parents:
diff changeset
  5700
            {
hgs
parents:
diff changeset
  5701
            ret = repository->Set( KMuiuMemoryInUse, currentDrive );
hgs
parents:
diff changeset
  5702
            __ASSERT_DEBUG( !ret, User::Panic(KPanicText,KCRepositorySettingFailure) );
hgs
parents:
diff changeset
  5703
            CleanupStack::PopAndDestroy( repository );
hgs
parents:
diff changeset
  5704
            }
hgs
parents:
diff changeset
  5705
hgs
parents:
diff changeset
  5706
        }
hgs
parents:
diff changeset
  5707
    }
hgs
parents:
diff changeset
  5708
hgs
parents:
diff changeset
  5709
// ----------------------------------------------------
hgs
parents:
diff changeset
  5710
// CMceUi::SetMainViewActivatedFlag
hgs
parents:
diff changeset
  5711
//
hgs
parents:
diff changeset
  5712
// ----------------------------------------------------
hgs
parents:
diff changeset
  5713
void CMceUi::SetMainViewActivatedFlag( )
hgs
parents:
diff changeset
  5714
    {
hgs
parents:
diff changeset
  5715
    iMceUiFlags.SetMceFlag( EMceUiFlagsMainViewActivated );
hgs
parents:
diff changeset
  5716
    }
hgs
parents:
diff changeset
  5717
hgs
parents:
diff changeset
  5718
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5719
// CMceUi::AlwaysOnlineL
hgs
parents:
diff changeset
  5720
// This is static function
hgs
parents:
diff changeset
  5721
// Returns ETrue if always online is supported
hgs
parents:
diff changeset
  5722
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5723
TBool CMceUi::AlwaysOnlineL( )
hgs
parents:
diff changeset
  5724
    {
hgs
parents:
diff changeset
  5725
    TBool alwaysOnline = EFalse;
hgs
parents:
diff changeset
  5726
     if ( FeatureManager::FeatureSupported( KFeatureIdAlwaysOnLine )
hgs
parents:
diff changeset
  5727
        && FeatureManager::FeatureSupported( KFeatureIdAlwaysOnLineEmail ) )
hgs
parents:
diff changeset
  5728
        {
hgs
parents:
diff changeset
  5729
        TInt featureBitmask = 0;
hgs
parents:
diff changeset
  5730
hgs
parents:
diff changeset
  5731
        CRepository* repository = NULL;
hgs
parents:
diff changeset
  5732
        TRAPD( ret, repository = CRepository::NewL(KCRUidMuiuVariation) );
hgs
parents:
diff changeset
  5733
        CleanupStack::PushL( repository );
hgs
parents:
diff changeset
  5734
hgs
parents:
diff changeset
  5735
        if ( ret == KErrNone )
hgs
parents:
diff changeset
  5736
            {
hgs
parents:
diff changeset
  5737
            if ( repository->Get(KMuiuEmailConfigFlags,featureBitmask) != KErrNone )
hgs
parents:
diff changeset
  5738
                {
hgs
parents:
diff changeset
  5739
                alwaysOnline = EFalse;
hgs
parents:
diff changeset
  5740
                }
hgs
parents:
diff changeset
  5741
            else
hgs
parents:
diff changeset
  5742
                {
hgs
parents:
diff changeset
  5743
                alwaysOnline = featureBitmask & KEmailFeatureIdAlwaysOnline;
hgs
parents:
diff changeset
  5744
                }
hgs
parents:
diff changeset
  5745
            }
hgs
parents:
diff changeset
  5746
hgs
parents:
diff changeset
  5747
        CleanupStack::Pop( repository );
hgs
parents:
diff changeset
  5748
        delete repository;
hgs
parents:
diff changeset
  5749
hgs
parents:
diff changeset
  5750
        }
hgs
parents:
diff changeset
  5751
hgs
parents:
diff changeset
  5752
    return alwaysOnline;
hgs
parents:
diff changeset
  5753
    }
hgs
parents:
diff changeset
  5754
hgs
parents:
diff changeset
  5755
// ----------------------------------------------------
hgs
parents:
diff changeset
  5756
// CMceUi::RemoveFolderTabs
hgs
parents:
diff changeset
  5757
// ----------------------------------------------------
hgs
parents:
diff changeset
  5758
void CMceUi::RemoveFolderTabs()
hgs
parents:
diff changeset
  5759
    {
hgs
parents:
diff changeset
  5760
    MCELOGGER_ENTERFN("RemoveFolderTabs()");
hgs
parents:
diff changeset
  5761
hgs
parents:
diff changeset
  5762
    iNaviPane->Pop( iFolderIndicator );
hgs
parents:
diff changeset
  5763
hgs
parents:
diff changeset
  5764
    MCELOGGER_LEAVEFN("RemoveFolderTabs()");
hgs
parents:
diff changeset
  5765
    }
hgs
parents:
diff changeset
  5766
hgs
parents:
diff changeset
  5767
// ----------------------------------------------------
hgs
parents:
diff changeset
  5768
// CMceUi::ShowFolderTabsL
hgs
parents:
diff changeset
  5769
// ----------------------------------------------------
hgs
parents:
diff changeset
  5770
void CMceUi::ShowFolderTabsL( const TInt aDepth )
hgs
parents:
diff changeset
  5771
    {
hgs
parents:
diff changeset
  5772
    MCELOGGER_ENTERFN("ShowFolderTabsL()");
hgs
parents:
diff changeset
  5773
hgs
parents:
diff changeset
  5774
    CMceNaviPaneFolderIndicator* findicator =
hgs
parents:
diff changeset
  5775
        static_cast<CMceNaviPaneFolderIndicator*>( iFolderIndicator->DecoratedControl() );
hgs
parents:
diff changeset
  5776
hgs
parents:
diff changeset
  5777
    findicator->SetFolderDepth( aDepth );
hgs
parents:
diff changeset
  5778
    iNaviPane->PushL( *iFolderIndicator );
hgs
parents:
diff changeset
  5779
hgs
parents:
diff changeset
  5780
    MCELOGGER_LEAVEFN("ShowFolderTabsL()");
hgs
parents:
diff changeset
  5781
    }
hgs
parents:
diff changeset
  5782
hgs
parents:
diff changeset
  5783
// ----------------------------------------------------
hgs
parents:
diff changeset
  5784
// CMceUi::HandleMMSNotificationsDeleteL
hgs
parents:
diff changeset
  5785
//
hgs
parents:
diff changeset
  5786
// ----------------------------------------------------
hgs
parents:
diff changeset
  5787
void CMceUi::HandleMMSNotificationsDeleteL( TDes8& aParameter )
hgs
parents:
diff changeset
  5788
    {
hgs
parents:
diff changeset
  5789
    CBaseMtmUiData* uiData = NULL;
hgs
parents:
diff changeset
  5790
    uiData = GetMtmUiDataL( KUidMsgMMSNotification );
hgs
parents:
diff changeset
  5791
hgs
parents:
diff changeset
  5792
    TMsvId selId = iMMSNotifications->At(0);
hgs
parents:
diff changeset
  5793
    TMsvId mmsService;
hgs
parents:
diff changeset
  5794
    TMsvEntry mmsEntry;
hgs
parents:
diff changeset
  5795
    if ( uiData && iSession->GetEntry( selId, mmsService, mmsEntry ) == KErrNone  )
hgs
parents:
diff changeset
  5796
        {
hgs
parents:
diff changeset
  5797
        CBaseMtmUi& mtmUi=iMtmStore->GetMtmUiAndSetContextLC( mmsEntry );
hgs
parents:
diff changeset
  5798
        CMsvSingleOpWatcher* tempSingleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  5799
        CleanupStack::PushL( tempSingleOpWatcher );
hgs
parents:
diff changeset
  5800
hgs
parents:
diff changeset
  5801
        CMsvOperation* tempOp=mtmUi.InvokeAsyncFunctionL( KMtmUiFunctionDeleteMessage, *iMMSNotifications,
hgs
parents:
diff changeset
  5802
            tempSingleOpWatcher->iStatus, aParameter );
hgs
parents:
diff changeset
  5803
hgs
parents:
diff changeset
  5804
        if ( tempOp )
hgs
parents:
diff changeset
  5805
            {
hgs
parents:
diff changeset
  5806
            CleanupStack::PushL( tempOp );
hgs
parents:
diff changeset
  5807
            iOperations.AppendL( tempSingleOpWatcher );
hgs
parents:
diff changeset
  5808
            CleanupStack::Pop(2); // tempSingleOpWatcher, tempOp
hgs
parents:
diff changeset
  5809
            tempSingleOpWatcher->SetOperation( tempOp );
hgs
parents:
diff changeset
  5810
            }
hgs
parents:
diff changeset
  5811
        else
hgs
parents:
diff changeset
  5812
            {
hgs
parents:
diff changeset
  5813
            // User answered 'No' to the confirmation query and
hgs
parents:
diff changeset
  5814
            // NULL operation was returned
hgs
parents:
diff changeset
  5815
            CleanupStack::PopAndDestroy( tempSingleOpWatcher );
hgs
parents:
diff changeset
  5816
            if( iMMSNotifications )
hgs
parents:
diff changeset
  5817
                {
hgs
parents:
diff changeset
  5818
                delete iMMSNotifications;
hgs
parents:
diff changeset
  5819
                iMMSNotifications = NULL;
hgs
parents:
diff changeset
  5820
                }
hgs
parents:
diff changeset
  5821
            }
hgs
parents:
diff changeset
  5822
        CleanupStack::PopAndDestroy( ); // mtmUi
hgs
parents:
diff changeset
  5823
        }
hgs
parents:
diff changeset
  5824
hgs
parents:
diff changeset
  5825
    }
hgs
parents:
diff changeset
  5826
hgs
parents:
diff changeset
  5827
// ----------------------------------------------------
hgs
parents:
diff changeset
  5828
// CMceUi::CheckMMSNotificationsL
hgs
parents:
diff changeset
  5829
//
hgs
parents:
diff changeset
  5830
// ----------------------------------------------------
hgs
parents:
diff changeset
  5831
void CMceUi::CheckMMSNotificationsL( CMsvEntrySelection* aSelection )
hgs
parents:
diff changeset
  5832
    {
hgs
parents:
diff changeset
  5833
    TMsvId id;
hgs
parents:
diff changeset
  5834
    TMsvId service;
hgs
parents:
diff changeset
  5835
    TMsvEntry tEntry;
hgs
parents:
diff changeset
  5836
    CBaseMtmUiData* uiData = NULL;
hgs
parents:
diff changeset
  5837
    uiData = GetMtmUiDataL( KUidMsgMMSNotification );
hgs
parents:
diff changeset
  5838
hgs
parents:
diff changeset
  5839
    if ( iMMSNotifications )
hgs
parents:
diff changeset
  5840
        {
hgs
parents:
diff changeset
  5841
        delete iMMSNotifications;
hgs
parents:
diff changeset
  5842
        iMMSNotifications = NULL;
hgs
parents:
diff changeset
  5843
        }
hgs
parents:
diff changeset
  5844
    iMMSNotifications = new( ELeave ) CMsvEntrySelection();
hgs
parents:
diff changeset
  5845
hgs
parents:
diff changeset
  5846
    for ( TInt cc=aSelection->Count(); --cc>=0; )
hgs
parents:
diff changeset
  5847
        {
hgs
parents:
diff changeset
  5848
        id = aSelection->At(cc);
hgs
parents:
diff changeset
  5849
        if ( iSession->GetEntry( id, service, tEntry ) == KErrNone  )
hgs
parents:
diff changeset
  5850
            {
hgs
parents:
diff changeset
  5851
            if ( tEntry.iMtm == KUidMsgMMSNotification )
hgs
parents:
diff changeset
  5852
                {
hgs
parents:
diff changeset
  5853
                if ( uiData && !uiData->OperationSupportedL( KMtmUiFunctionDeleteMessage, tEntry ) )
hgs
parents:
diff changeset
  5854
                    {
hgs
parents:
diff changeset
  5855
                    iMMSNotifications->AppendL( tEntry.Id() );
hgs
parents:
diff changeset
  5856
                    aSelection->Delete( cc );
hgs
parents:
diff changeset
  5857
                    }
hgs
parents:
diff changeset
  5858
                else
hgs
parents:
diff changeset
  5859
                    {
hgs
parents:
diff changeset
  5860
                    aSelection->Delete( cc );
hgs
parents:
diff changeset
  5861
                    }
hgs
parents:
diff changeset
  5862
                }
hgs
parents:
diff changeset
  5863
            }
hgs
parents:
diff changeset
  5864
        }
hgs
parents:
diff changeset
  5865
hgs
parents:
diff changeset
  5866
    }
hgs
parents:
diff changeset
  5867
hgs
parents:
diff changeset
  5868
// ----------------------------------------------------
hgs
parents:
diff changeset
  5869
// CMceUi::OpenMailboxSettingsL
hgs
parents:
diff changeset
  5870
// ----------------------------------------------------
hgs
parents:
diff changeset
  5871
void CMceUi::OpenMailboxSettingsL()
hgs
parents:
diff changeset
  5872
    {
hgs
parents:
diff changeset
  5873
    MCELOGGER_ENTERFN("OpenMailboxSettingsL()");
hgs
parents:
diff changeset
  5874
hgs
parents:
diff changeset
  5875
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  5876
        {
hgs
parents:
diff changeset
  5877
        return;
hgs
parents:
diff changeset
  5878
        }
hgs
parents:
diff changeset
  5879
hgs
parents:
diff changeset
  5880
    // Is settings opened from General Settings
hgs
parents:
diff changeset
  5881
    CMuiuLock* repositoryLock = CMuiuLock::NewL( KMuiuLockSettings );
hgs
parents:
diff changeset
  5882
    CleanupStack::PushL(repositoryLock);
hgs
parents:
diff changeset
  5883
    TInt err = repositoryLock->Reserve();
hgs
parents:
diff changeset
  5884
    // Check that settings are not opened from General Settings
hgs
parents:
diff changeset
  5885
    if ( !err )
hgs
parents:
diff changeset
  5886
        {
hgs
parents:
diff changeset
  5887
        iMceListView->OpenMailboxSettingsL();
hgs
parents:
diff changeset
  5888
        }
hgs
parents:
diff changeset
  5889
    else
hgs
parents:
diff changeset
  5890
        {
hgs
parents:
diff changeset
  5891
        // Show information note: General Settings has opened settings
hgs
parents:
diff changeset
  5892
        CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(
hgs
parents:
diff changeset
  5893
            CAknNoteDialog::ENoTone, CAknNoteDialog::ELongTimeout);
hgs
parents:
diff changeset
  5894
        dlg->ExecuteLD(R_MCE_NOTE_SETTINGS_OPEN_GS);
hgs
parents:
diff changeset
  5895
        }
hgs
parents:
diff changeset
  5896
    repositoryLock->Release();
hgs
parents:
diff changeset
  5897
    CleanupStack::PopAndDestroy( repositoryLock );
hgs
parents:
diff changeset
  5898
hgs
parents:
diff changeset
  5899
    MCELOGGER_LEAVEFN("OpenMailboxSettingsL");
hgs
parents:
diff changeset
  5900
    }
hgs
parents:
diff changeset
  5901
hgs
parents:
diff changeset
  5902
// ----------------------------------------------------
hgs
parents:
diff changeset
  5903
// CMceUi::SyncMlMarkAsReadL
hgs
parents:
diff changeset
  5904
// ----------------------------------------------------
hgs
parents:
diff changeset
  5905
void CMceUi::SyncMlMarkAsReadL( )
hgs
parents:
diff changeset
  5906
    {
hgs
parents:
diff changeset
  5907
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  5908
        {
hgs
parents:
diff changeset
  5909
        return;
hgs
parents:
diff changeset
  5910
        }
hgs
parents:
diff changeset
  5911
hgs
parents:
diff changeset
  5912
    CMsvEntrySelection * selection = iMceListView->ListContainer()
hgs
parents:
diff changeset
  5913
        ->CurrentItemSelectionL();
hgs
parents:
diff changeset
  5914
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  5915
hgs
parents:
diff changeset
  5916
    if (  selection->Count() <= 0 )
hgs
parents:
diff changeset
  5917
        {
hgs
parents:
diff changeset
  5918
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  5919
        return;
hgs
parents:
diff changeset
  5920
        }
hgs
parents:
diff changeset
  5921
hgs
parents:
diff changeset
  5922
    CBaseMtmUi& mtmUi = iMtmStore->GetMtmUiLC( KSenduiMtmSyncMLEmailUid );
hgs
parents:
diff changeset
  5923
hgs
parents:
diff changeset
  5924
    CMsvSingleOpWatcher* tempSingleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  5925
    CleanupStack::PushL( tempSingleOpWatcher );
hgs
parents:
diff changeset
  5926
    TBuf8<1> blankParams;
hgs
parents:
diff changeset
  5927
hgs
parents:
diff changeset
  5928
    CMsvOperation* tempOp = mtmUi.InvokeAsyncFunctionL( KMtmUiFunctionMarkAsRead, *selection,
hgs
parents:
diff changeset
  5929
        tempSingleOpWatcher->iStatus, blankParams );
hgs
parents:
diff changeset
  5930
hgs
parents:
diff changeset
  5931
    CleanupStack::PushL( tempOp );
hgs
parents:
diff changeset
  5932
    iOperations.AppendL( tempSingleOpWatcher );
hgs
parents:
diff changeset
  5933
    CleanupStack::Pop( 2 ); // tempSingleOpWatcher, tempOp
hgs
parents:
diff changeset
  5934
    tempSingleOpWatcher->SetOperation( tempOp );
hgs
parents:
diff changeset
  5935
    CleanupStack::PopAndDestroy( 2 ); // mtmUi, selection
hgs
parents:
diff changeset
  5936
    }
hgs
parents:
diff changeset
  5937
hgs
parents:
diff changeset
  5938
// ----------------------------------------------------
hgs
parents:
diff changeset
  5939
// CMceUi::CheckMMSNotifDelFailedL
hgs
parents:
diff changeset
  5940
// ----------------------------------------------------
hgs
parents:
diff changeset
  5941
void CMceUi::CheckMMSNotifDelFailedL()
hgs
parents:
diff changeset
  5942
    {
hgs
parents:
diff changeset
  5943
    MCELOGGER_ENTERFN("CheckMMSNotifDelFailedL()");
hgs
parents:
diff changeset
  5944
hgs
parents:
diff changeset
  5945
    CBaseMtmUiData* data = GetMtmUiDataL( KUidMsgMMSNotification );
hgs
parents:
diff changeset
  5946
    if ( data )
hgs
parents:
diff changeset
  5947
        {
hgs
parents:
diff changeset
  5948
        TInt count = iMMSNotifications->Count();
hgs
parents:
diff changeset
  5949
        TInt failed = 0;
hgs
parents:
diff changeset
  5950
        TMsvId serviceId;
hgs
parents:
diff changeset
  5951
        for(TInt loop = 0; loop < count; loop++)
hgs
parents:
diff changeset
  5952
            {
hgs
parents:
diff changeset
  5953
            TMsvEntry entry;
hgs
parents:
diff changeset
  5954
            if ( iSession->GetEntry(iMMSNotifications->At(loop),serviceId,entry) == KErrNone )
hgs
parents:
diff changeset
  5955
            	{
hgs
parents:
diff changeset
  5956
            	if ( !( entry.iMtmData2 & KMmsNewOperationForbidden ) &&
hgs
parents:
diff changeset
  5957
                	!( entry.iMtmData2 & KMmsOperationOngoing ) &&
hgs
parents:
diff changeset
  5958
                	( entry.iMtmData2 & KMmsOperationFinished ) &&
hgs
parents:
diff changeset
  5959
                	( entry.iMtmData2 & KMmsOperationResult ) )
hgs
parents:
diff changeset
  5960
                	{
hgs
parents:
diff changeset
  5961
                	failed++;               
hgs
parents:
diff changeset
  5962
                	}
hgs
parents:
diff changeset
  5963
            	}
hgs
parents:
diff changeset
  5964
            } // end loop
hgs
parents:
diff changeset
  5965
hgs
parents:
diff changeset
  5966
hgs
parents:
diff changeset
  5967
        if ( failed > 0 )
hgs
parents:
diff changeset
  5968
            {
hgs
parents:
diff changeset
  5969
            CAknQueryDialog* note = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  5970
            HBufC* text = NULL;
hgs
parents:
diff changeset
  5971
            if ( failed == KMceOneMMSNotificationFailed )
hgs
parents:
diff changeset
  5972
                {
hgs
parents:
diff changeset
  5973
                text = StringLoader::LoadLC(
hgs
parents:
diff changeset
  5974
                    R_MMS_INFO_REMOTE_DEL_FAILED, iEikonEnv );
hgs
parents:
diff changeset
  5975
                note->SetPromptL( *text );
hgs
parents:
diff changeset
  5976
                note->ExecuteLD( R_MCE_MEMC_NOTE );
hgs
parents:
diff changeset
  5977
                CleanupStack::PopAndDestroy(  ); // text
hgs
parents:
diff changeset
  5978
                }
hgs
parents:
diff changeset
  5979
            else
hgs
parents:
diff changeset
  5980
                {
hgs
parents:
diff changeset
  5981
                CArrayFix<TInt>* indexArray =
hgs
parents:
diff changeset
  5982
                     new( ELeave ) CArrayFixFlat<TInt>( KMceArrayGranularity );
hgs
parents:
diff changeset
  5983
                CleanupStack::PushL( indexArray );
hgs
parents:
diff changeset
  5984
                indexArray->AppendL( failed );
hgs
parents:
diff changeset
  5985
                indexArray->AppendL( count );
hgs
parents:
diff changeset
  5986
                text = StringLoader::LoadLC(
hgs
parents:
diff changeset
  5987
                    R_MMS_INFO_REMOTE_DEL_FAILED_MANY, *indexArray, iEikonEnv );
hgs
parents:
diff changeset
  5988
hgs
parents:
diff changeset
  5989
                note->SetPromptL( *text );
hgs
parents:
diff changeset
  5990
                note->ExecuteLD( R_MCE_MEMC_NOTE );
hgs
parents:
diff changeset
  5991
                CleanupStack::PopAndDestroy( 2 ); // text, indexArray
hgs
parents:
diff changeset
  5992
                }
hgs
parents:
diff changeset
  5993
           }
hgs
parents:
diff changeset
  5994
hgs
parents:
diff changeset
  5995
       delete iMMSNotifications;
hgs
parents:
diff changeset
  5996
       iMMSNotifications = NULL;
hgs
parents:
diff changeset
  5997
       }
hgs
parents:
diff changeset
  5998
hgs
parents:
diff changeset
  5999
    MCELOGGER_LEAVEFN("CheckMMSNotifDelFailedL");
hgs
parents:
diff changeset
  6000
    }
hgs
parents:
diff changeset
  6001
hgs
parents:
diff changeset
  6002
// ----------------------------------------------------
hgs
parents:
diff changeset
  6003
// CMceUi::AddMultiselectionMTMFunctionsL
hgs
parents:
diff changeset
  6004
// ----------------------------------------------------
hgs
parents:
diff changeset
  6005
void CMceUi::AddMultiselectionMTMFunctionsL(CEikMenuPane& aMenuPane, TInt /*aMenuCommandId*/)
hgs
parents:
diff changeset
  6006
    {
hgs
parents:
diff changeset
  6007
    MCELOGGER_ENTERFN("AddMultiselectionMTMFunctionsL()");
hgs
parents:
diff changeset
  6008
    
hgs
parents:
diff changeset
  6009
    CEikMenuPaneItem::SData data;
hgs
parents:
diff changeset
  6010
    data.iCascadeId = 0;
hgs
parents:
diff changeset
  6011
    data.iFlags = 0;
hgs
parents:
diff changeset
  6012
    TInt cc;
hgs
parents:
diff changeset
  6013
    TInt sendCmd = EMceCmdFirstMTMFunction;
hgs
parents:
diff changeset
  6014
    const TInt count = iMTMFunctionsArray->Count();
hgs
parents:
diff changeset
  6015
hgs
parents:
diff changeset
  6016
    for ( cc = 0; cc < count; cc++ )
hgs
parents:
diff changeset
  6017
        {
hgs
parents:
diff changeset
  6018
        TMsgFunctionInfo& functionInfo = iMTMFunctionsArray->At(cc);
hgs
parents:
diff changeset
  6019
        data.iText = functionInfo.iCaption;
hgs
parents:
diff changeset
  6020
        data.iCommandId = sendCmd;
hgs
parents:
diff changeset
  6021
hgs
parents:
diff changeset
  6022
        if ( ( functionInfo.iFuncId == KMtmUiFunctionMMBox ) &&
hgs
parents:
diff changeset
  6023
            ( MceViewActive( EMceMessageViewActive ) && 
hgs
parents:
diff changeset
  6024
            iMceListView->ListContainer()->CurrentFolderId() 
hgs
parents:
diff changeset
  6025
            == KMsvGlobalInBoxIndexEntryId ) ) //MMS notification
hgs
parents:
diff changeset
  6026
            {
hgs
parents:
diff changeset
  6027
            TInt pos;
hgs
parents:
diff changeset
  6028
            if ( !aMenuPane.MenuItemExists ( sendCmd, pos ) )
hgs
parents:
diff changeset
  6029
                {
hgs
parents:
diff changeset
  6030
                aMenuPane.AddMenuItemL( data, EAknCmdOpen );
hgs
parents:
diff changeset
  6031
                }
hgs
parents:
diff changeset
  6032
            }
hgs
parents:
diff changeset
  6033
hgs
parents:
diff changeset
  6034
        sendCmd++;
hgs
parents:
diff changeset
  6035
        }
hgs
parents:
diff changeset
  6036
    MCELOGGER_LEAVEFN("AddMultiselectionMTMFunctionsL()");
hgs
parents:
diff changeset
  6037
    }
hgs
parents:
diff changeset
  6038
hgs
parents:
diff changeset
  6039
// ----------------------------------------------------
hgs
parents:
diff changeset
  6040
// CMceUi::CheckCspBitL
hgs
parents:
diff changeset
  6041
// ----------------------------------------------------
hgs
parents:
diff changeset
  6042
TBool CMceUi::CheckCspBitL( ) const
hgs
parents:
diff changeset
  6043
    {
hgs
parents:
diff changeset
  6044
    MCELOGGER_ENTERFN("CheckCspBitL()");
hgs
parents:
diff changeset
  6045
    RCustomerServiceProfileCache csp;
hgs
parents:
diff changeset
  6046
    TInt error = csp.Open();
hgs
parents:
diff changeset
  6047
    if ( error )
hgs
parents:
diff changeset
  6048
        {
hgs
parents:
diff changeset
  6049
        return ETrue;
hgs
parents:
diff changeset
  6050
        }
hgs
parents:
diff changeset
  6051
hgs
parents:
diff changeset
  6052
    RMobilePhone::TCspTeleservices params;
hgs
parents:
diff changeset
  6053
    TInt retVal = csp.CspTeleServices( params );
hgs
parents:
diff changeset
  6054
    csp.Close();
hgs
parents:
diff changeset
  6055
hgs
parents:
diff changeset
  6056
    if ( retVal == KErrNone )
hgs
parents:
diff changeset
  6057
        {
hgs
parents:
diff changeset
  6058
        if ( ( params&RMobilePhone::KCspSMCB ) != 0 )
hgs
parents:
diff changeset
  6059
            {
hgs
parents:
diff changeset
  6060
            MCELOGGER_LEAVEFN("CheckCspBitL()");
hgs
parents:
diff changeset
  6061
            // Cell Broadcast CSP bit is on
hgs
parents:
diff changeset
  6062
            return ETrue;
hgs
parents:
diff changeset
  6063
            }
hgs
parents:
diff changeset
  6064
        else
hgs
parents:
diff changeset
  6065
            {
hgs
parents:
diff changeset
  6066
            MCELOGGER_LEAVEFN("CheckCspBitL()");
hgs
parents:
diff changeset
  6067
            // Cell Broadcast CSP bit is off
hgs
parents:
diff changeset
  6068
            return EFalse;
hgs
parents:
diff changeset
  6069
            }
hgs
parents:
diff changeset
  6070
        }
hgs
parents:
diff changeset
  6071
    else
hgs
parents:
diff changeset
  6072
        {
hgs
parents:
diff changeset
  6073
        MCELOGGER_LEAVEFN("CheckCspBitL()");
hgs
parents:
diff changeset
  6074
        // Error: By default show the CBS service
hgs
parents:
diff changeset
  6075
        return ETrue;
hgs
parents:
diff changeset
  6076
        }
hgs
parents:
diff changeset
  6077
    }
hgs
parents:
diff changeset
  6078
hgs
parents:
diff changeset
  6079
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6080
// CMceUi::CspBitsL
hgs
parents:
diff changeset
  6081
// Returns ETrue if csp bits is supported
hgs
parents:
diff changeset
  6082
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6083
//
hgs
parents:
diff changeset
  6084
TBool CMceUi::CspBitsL( )
hgs
parents:
diff changeset
  6085
    {
hgs
parents:
diff changeset
  6086
    TBool csp = EFalse;
hgs
parents:
diff changeset
  6087
    TInt featureBitmask = 0;
hgs
parents:
diff changeset
  6088
hgs
parents:
diff changeset
  6089
    CRepository* repository = NULL;
hgs
parents:
diff changeset
  6090
    TRAPD( ret, repository = CRepository::NewL(KCRUidMuiuVariation) );
hgs
parents:
diff changeset
  6091
    CleanupStack::PushL( repository );
hgs
parents:
diff changeset
  6092
hgs
parents:
diff changeset
  6093
    if ( ret == KErrNone )
hgs
parents:
diff changeset
  6094
        {
hgs
parents:
diff changeset
  6095
        if ( repository->Get(KMuiuMceFeatures,featureBitmask) != KErrNone )
hgs
parents:
diff changeset
  6096
            {
hgs
parents:
diff changeset
  6097
            csp = EFalse;
hgs
parents:
diff changeset
  6098
            }
hgs
parents:
diff changeset
  6099
        else
hgs
parents:
diff changeset
  6100
            {
hgs
parents:
diff changeset
  6101
            csp = featureBitmask & KMceFeatureIdCSPSupport;
hgs
parents:
diff changeset
  6102
            }
hgs
parents:
diff changeset
  6103
        }
hgs
parents:
diff changeset
  6104
hgs
parents:
diff changeset
  6105
    CleanupStack::Pop( repository );
hgs
parents:
diff changeset
  6106
    delete repository;
hgs
parents:
diff changeset
  6107
hgs
parents:
diff changeset
  6108
    return csp;
hgs
parents:
diff changeset
  6109
    }
hgs
parents:
diff changeset
  6110
hgs
parents:
diff changeset
  6111
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6112
// CMmsViewerAppUi::DoUploadL
hgs
parents:
diff changeset
  6113
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6114
void CMceUi::DoUploadL( TInt aIndex )
hgs
parents:
diff changeset
  6115
    {
hgs
parents:
diff changeset
  6116
    TInt i = aIndex;
hgs
parents:
diff changeset
  6117
    CSendingServiceInfo* info = iUploadServices[ i ];
hgs
parents:
diff changeset
  6118
    TMsgUploadParameters uploadParams;
hgs
parents:
diff changeset
  6119
    uploadParams.iDirect = ( info->ServiceProviderId() == KMmsDirectUpload );
hgs
parents:
diff changeset
  6120
    uploadParams.iRealAddress = info->ServiceAddress();
hgs
parents:
diff changeset
  6121
    uploadParams.iAlias = info->ServiceName();
hgs
parents:
diff changeset
  6122
hgs
parents:
diff changeset
  6123
    // Pack upload parameters
hgs
parents:
diff changeset
  6124
    TPckgBuf<TMsgUploadParameters> param( uploadParams );
hgs
parents:
diff changeset
  6125
hgs
parents:
diff changeset
  6126
    // Current selection
hgs
parents:
diff changeset
  6127
    CMsvEntrySelection* selection = iMceListView->ListContainer()->CurrentItemSelectionL();
hgs
parents:
diff changeset
  6128
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  6129
hgs
parents:
diff changeset
  6130
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  6131
    CMuiuOperationWait* wait =
hgs
parents:
diff changeset
  6132
        CMuiuOperationWait::NewLC( EActivePriorityWsEvents + 10 );
hgs
parents:
diff changeset
  6133
hgs
parents:
diff changeset
  6134
// Get a handle of the MMS MTM
hgs
parents:
diff changeset
  6135
    CBaseMtmUi& mtmUi = iMtmStore->GetMtmUiLC( KSenduiMtmMmsUid );
hgs
parents:
diff changeset
  6136
hgs
parents:
diff changeset
  6137
    CMsvOperation* oper = mtmUi.InvokeAsyncFunctionL(
hgs
parents:
diff changeset
  6138
        KMtmUiFunctionUpload,
hgs
parents:
diff changeset
  6139
        *selection,
hgs
parents:
diff changeset
  6140
        wait->iStatus,
hgs
parents:
diff changeset
  6141
        param );
hgs
parents:
diff changeset
  6142
    CleanupStack::PushL( oper );
hgs
parents:
diff changeset
  6143
hgs
parents:
diff changeset
  6144
    wait->Start();
hgs
parents:
diff changeset
  6145
hgs
parents:
diff changeset
  6146
    CleanupStack::PopAndDestroy( 5, selection ); // selection, CAknInputBlock, wait, oper
hgs
parents:
diff changeset
  6147
    }
hgs
parents:
diff changeset
  6148
hgs
parents:
diff changeset
  6149
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6150
// CMceUi::ShowUploadQueryL
hgs
parents:
diff changeset
  6151
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6152
void CMceUi::ShowUploadQueryL()
hgs
parents:
diff changeset
  6153
    {
hgs
parents:
diff changeset
  6154
    TInt count = iUploadServices.Count();
hgs
parents:
diff changeset
  6155
hgs
parents:
diff changeset
  6156
    TInt selectedIndex = 0;
hgs
parents:
diff changeset
  6157
    CAknListQueryDialog* dlg = new ( ELeave )
hgs
parents:
diff changeset
  6158
        CAknListQueryDialog( &selectedIndex );
hgs
parents:
diff changeset
  6159
    dlg->PrepareLC( R_MCE_UPLOAD_LIST_QUERY );
hgs
parents:
diff changeset
  6160
hgs
parents:
diff changeset
  6161
    // Populate list query array
hgs
parents:
diff changeset
  6162
    CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 4 );
hgs
parents:
diff changeset
  6163
    CleanupStack::PushL( array );
hgs
parents:
diff changeset
  6164
    for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
  6165
        {
hgs
parents:
diff changeset
  6166
        array->AppendL( iUploadServices[ i ]->ServiceMenuName() );
hgs
parents:
diff changeset
  6167
        }
hgs
parents:
diff changeset
  6168
    dlg->SetItemTextArray( array );
hgs
parents:
diff changeset
  6169
    CleanupStack::Pop( array );
hgs
parents:
diff changeset
  6170
hgs
parents:
diff changeset
  6171
    if ( dlg->RunLD() )
hgs
parents:
diff changeset
  6172
        {
hgs
parents:
diff changeset
  6173
        DoUploadL( selectedIndex );
hgs
parents:
diff changeset
  6174
        }
hgs
parents:
diff changeset
  6175
hgs
parents:
diff changeset
  6176
    }
hgs
parents:
diff changeset
  6177
hgs
parents:
diff changeset
  6178
// MMS.Content.Upload
hgs
parents:
diff changeset
  6179
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6180
// CMceUi::NumUploadServices
hgs
parents:
diff changeset
  6181
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6182
TInt CMceUi::NumUploadServices()
hgs
parents:
diff changeset
  6183
    {
hgs
parents:
diff changeset
  6184
    return iUploadServices.Count();
hgs
parents:
diff changeset
  6185
    }
hgs
parents:
diff changeset
  6186
hgs
parents:
diff changeset
  6187
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6188
// CMceUi::HandleNotifL
hgs
parents:
diff changeset
  6189
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6190
void CMceUi::HandleNotif()
hgs
parents:
diff changeset
  6191
    {
hgs
parents:
diff changeset
  6192
    if ( !iEmailNotifHandler )
hgs
parents:
diff changeset
  6193
        {
hgs
parents:
diff changeset
  6194
        // Handling of NCN reset
hgs
parents:
diff changeset
  6195
        TRAPD( err, iEmailNotifHandler = CMceEmailNotifHandler::NewL() );
hgs
parents:
diff changeset
  6196
        MCELOGGER_WRITE_FORMAT("ConstructL iEmailNotifHandler err %d", err);
hgs
parents:
diff changeset
  6197
        if ( err )
hgs
parents:
diff changeset
  6198
            {
hgs
parents:
diff changeset
  6199
            iEmailNotifHandler = NULL;
hgs
parents:
diff changeset
  6200
            }
hgs
parents:
diff changeset
  6201
        }
hgs
parents:
diff changeset
  6202
    if (iEmailNotifHandler)
hgs
parents:
diff changeset
  6203
        iEmailNotifHandler->HandleNotif();
hgs
parents:
diff changeset
  6204
    }
hgs
parents:
diff changeset
  6205
hgs
parents:
diff changeset
  6206
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6207
// CMceUi::HandleNotifL
hgs
parents:
diff changeset
  6208
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6209
void CMceUi::HandleNotif(const TMsvId& aMailbox)
hgs
parents:
diff changeset
  6210
    {
hgs
parents:
diff changeset
  6211
    if ( !iEmailNotifHandler )
hgs
parents:
diff changeset
  6212
        {
hgs
parents:
diff changeset
  6213
        // Handling of NCN reset
hgs
parents:
diff changeset
  6214
        TRAPD( err, iEmailNotifHandler = CMceEmailNotifHandler::NewL() );
hgs
parents:
diff changeset
  6215
        if ( err )
hgs
parents:
diff changeset
  6216
            {
hgs
parents:
diff changeset
  6217
            iEmailNotifHandler = NULL;
hgs
parents:
diff changeset
  6218
            }
hgs
parents:
diff changeset
  6219
        }
hgs
parents:
diff changeset
  6220
    if ( iEmailNotifHandler )
hgs
parents:
diff changeset
  6221
        {
hgs
parents:
diff changeset
  6222
        iEmailNotifHandler->HandleNotif(aMailbox);
hgs
parents:
diff changeset
  6223
        }
hgs
parents:
diff changeset
  6224
    }
hgs
parents:
diff changeset
  6225
hgs
parents:
diff changeset
  6226
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6227
// CMceUi::CheckSIMAccessProfileL
hgs
parents:
diff changeset
  6228
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6229
void CMceUi::CheckSIMAccessProfileL()
hgs
parents:
diff changeset
  6230
    {
hgs
parents:
diff changeset
  6231
    // P&S key of the SIM access profile
hgs
parents:
diff changeset
  6232
    RProperty property;
hgs
parents:
diff changeset
  6233
    TInt sapState( 0 );
hgs
parents:
diff changeset
  6234
    User::LeaveIfError( property.Attach( KPSUidBluetoothSapConnectionState, KBTSapConnectionState ) );
hgs
parents:
diff changeset
  6235
    CleanupClosePushL( property );
hgs
parents:
diff changeset
  6236
    
hgs
parents:
diff changeset
  6237
    property.Get( sapState );
hgs
parents:
diff changeset
  6238
hgs
parents:
diff changeset
  6239
    if ( (sapState==EBTSapConnecting) || (sapState==EBTSapConnected) )
hgs
parents:
diff changeset
  6240
        {
hgs
parents:
diff changeset
  6241
        // SIM access profile is connecting/connected, MCE is not started
hgs
parents:
diff changeset
  6242
        HBufC* text = StringLoader::LoadLC( R_QTN_OFFLINE_NOT_POSSIBLE_SAP, iEikonEnv );
hgs
parents:
diff changeset
  6243
        // ETrue waiting/non-waiting dialoog
hgs
parents:
diff changeset
  6244
        CAknInformationNote* note = new(ELeave) CAknInformationNote( ETrue );
hgs
parents:
diff changeset
  6245
        note->SetTimeout( CAknNoteDialog::ELongTimeout ); // ELongTimeout
hgs
parents:
diff changeset
  6246
        note->ExecuteLD( *text );
hgs
parents:
diff changeset
  6247
        CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
  6248
        // Exit the application
hgs
parents:
diff changeset
  6249
        CleanupStack::PopAndDestroy( &property );
hgs
parents:
diff changeset
  6250
        Exit();
hgs
parents:
diff changeset
  6251
        }
hgs
parents:
diff changeset
  6252
    else
hgs
parents:
diff changeset
  6253
        {
hgs
parents:
diff changeset
  6254
        CleanupStack::PopAndDestroy( &property );       
hgs
parents:
diff changeset
  6255
        }
hgs
parents:
diff changeset
  6256
    }
hgs
parents:
diff changeset
  6257
hgs
parents:
diff changeset
  6258
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6259
// CMceUi::SetViewUpdateSuppressionFlag
hgs
parents:
diff changeset
  6260
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6261
void CMceUi::SetViewUpdateSuppressionFlag( TBool aValue, CMsvOperation* aOp )
hgs
parents:
diff changeset
  6262
    {
hgs
parents:
diff changeset
  6263
    if ( aValue )
hgs
parents:
diff changeset
  6264
        {
hgs
parents:
diff changeset
  6265
        iMceUiFlags.SetMceFlag( EMceUiFlagsSupressViewUpdate );
hgs
parents:
diff changeset
  6266
        iBlockingOperation = aOp;
hgs
parents:
diff changeset
  6267
        }
hgs
parents:
diff changeset
  6268
    else
hgs
parents:
diff changeset
  6269
        {
hgs
parents:
diff changeset
  6270
        iMceUiFlags.ClearMceFlag( EMceUiFlagsSupressViewUpdate );
hgs
parents:
diff changeset
  6271
        iBlockingOperation = NULL;
hgs
parents:
diff changeset
  6272
        }
hgs
parents:
diff changeset
  6273
hgs
parents:
diff changeset
  6274
    }
hgs
parents:
diff changeset
  6275
hgs
parents:
diff changeset
  6276
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6277
// CMceUi::ViewUpdateSuppressionFlag
hgs
parents:
diff changeset
  6278
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6279
TBool CMceUi::ViewUpdateSuppressionFlag()
hgs
parents:
diff changeset
  6280
    {
hgs
parents:
diff changeset
  6281
    return iMceUiFlags.MceFlag( EMceUiFlagsSupressViewUpdate );
hgs
parents:
diff changeset
  6282
    }
hgs
parents:
diff changeset
  6283
hgs
parents:
diff changeset
  6284
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6285
// CMceUi::ReleaseMtmUiData
hgs
parents:
diff changeset
  6286
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6287
void CMceUi::ReleaseMtmUiData()
hgs
parents:
diff changeset
  6288
    {
hgs
parents:
diff changeset
  6289
    MCELOGGER_ENTERFN("ReleaseMtmUiData()");
hgs
parents:
diff changeset
  6290
    const TInt count = iUiRegistry->NumRegisteredMtmDlls();
hgs
parents:
diff changeset
  6291
    MCELOGGER_WRITE_FORMAT("Mtm cound %d", count);
hgs
parents:
diff changeset
  6292
hgs
parents:
diff changeset
  6293
    for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
  6294
        {
hgs
parents:
diff changeset
  6295
        TUid uid = iUiRegistry->MtmTypeUid(i);
hgs
parents:
diff changeset
  6296
        if ( !MceUtils::IsMtmBuiltIn(uid) )
hgs
parents:
diff changeset
  6297
            {
hgs
parents:
diff changeset
  6298
            iMtmStore->ReleaseMtmUiData( uid );
hgs
parents:
diff changeset
  6299
            }
hgs
parents:
diff changeset
  6300
        }
hgs
parents:
diff changeset
  6301
    MCELOGGER_LEAVEFN("ReleaseMtmUiData()");
hgs
parents:
diff changeset
  6302
    }
hgs
parents:
diff changeset
  6303
hgs
parents:
diff changeset
  6304
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6305
// CMceUi::InformationNoteCannotMoveCopyEMailL
hgs
parents:
diff changeset
  6306
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6307
void CMceUi::InformationNoteCannotMoveCopyEMailL()
hgs
parents:
diff changeset
  6308
    {
hgs
parents:
diff changeset
  6309
    HBufC* errorText = StringLoader::LoadL( R_MCE_INFO_CANNOT_MOVE, iEikonEnv );
hgs
parents:
diff changeset
  6310
    CleanupStack::PushL( errorText );
hgs
parents:
diff changeset
  6311
    CAknInformationNote* note = new(ELeave)CAknInformationNote( ETrue );
hgs
parents:
diff changeset
  6312
    note->ExecuteLD(*errorText);
hgs
parents:
diff changeset
  6313
    CleanupStack::PopAndDestroy( errorText );
hgs
parents:
diff changeset
  6314
    }
hgs
parents:
diff changeset
  6315
hgs
parents:
diff changeset
  6316
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6317
// CMceUi::RemoveEmailMessagesFromSelection
hgs
parents:
diff changeset
  6318
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6319
TBool CMceUi::RemoveEmailMessagesFromSelection( CMsvEntrySelection *aSelection )
hgs
parents:
diff changeset
  6320
    {
hgs
parents:
diff changeset
  6321
    TBool mailMessage = EFalse;
hgs
parents:
diff changeset
  6322
    TInt count = aSelection->Count();
hgs
parents:
diff changeset
  6323
    TMsvId service;
hgs
parents:
diff changeset
  6324
    TMsvEntry tEntry;
hgs
parents:
diff changeset
  6325
hgs
parents:
diff changeset
  6326
    for ( TInt cc=count; --cc>=0; )
hgs
parents:
diff changeset
  6327
        {
hgs
parents:
diff changeset
  6328
        TMsvId id = aSelection->At(cc);
hgs
parents:
diff changeset
  6329
        if ( iSession->GetEntry( id, service, tEntry ) == KErrNone  )
hgs
parents:
diff changeset
  6330
            {
hgs
parents:
diff changeset
  6331
            if ( tEntry.iMtm==KSenduiMtmImap4Uid || tEntry.iMtm==KSenduiMtmPop3Uid ||
hgs
parents:
diff changeset
  6332
                 tEntry.iMtm==KSenduiMtmSmtpUid )
hgs
parents:
diff changeset
  6333
                {
hgs
parents:
diff changeset
  6334
                aSelection->Delete( cc );
hgs
parents:
diff changeset
  6335
                mailMessage = ETrue;
hgs
parents:
diff changeset
  6336
                }
hgs
parents:
diff changeset
  6337
            }
hgs
parents:
diff changeset
  6338
        }
hgs
parents:
diff changeset
  6339
hgs
parents:
diff changeset
  6340
    return mailMessage;
hgs
parents:
diff changeset
  6341
    }
hgs
parents:
diff changeset
  6342
hgs
parents:
diff changeset
  6343
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6344
// CMceUi::MailboxCreationOn
hgs
parents:
diff changeset
  6345
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6346
TBool CMceUi::MailboxCreationOn()
hgs
parents:
diff changeset
  6347
    {
hgs
parents:
diff changeset
  6348
    return iMailboxCreationOn;
hgs
parents:
diff changeset
  6349
    }
hgs
parents:
diff changeset
  6350
hgs
parents:
diff changeset
  6351
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6352
// CMceUi::ZoomLevelChangedL
hgs
parents:
diff changeset
  6353
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6354
TAknUiZoom CMceUi::ZoomLevelChangedL( TAknUiZoom aZoomLevel )
hgs
parents:
diff changeset
  6355
    {
hgs
parents:
diff changeset
  6356
    TAknUiZoom previous = LocalUiZoom();
hgs
parents:
diff changeset
  6357
    if ( aZoomLevel != previous &&
hgs
parents:
diff changeset
  6358
        !iMceUiFlags.MceFlag( EMceUiFlagsSettingsDialogOpen ) )
hgs
parents:
diff changeset
  6359
        {
hgs
parents:
diff changeset
  6360
        SetLocalUiZoom( aZoomLevel );
hgs
parents:
diff changeset
  6361
        ApplyLayoutChangeL( ETrue );
hgs
parents:
diff changeset
  6362
        }
hgs
parents:
diff changeset
  6363
    return previous;
hgs
parents:
diff changeset
  6364
    }
hgs
parents:
diff changeset
  6365
hgs
parents:
diff changeset
  6366
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6367
// CMceUi::ReadZoomLevelL
hgs
parents:
diff changeset
  6368
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6369
TAknUiZoom CMceUi::ReadZoomLevelL()
hgs
parents:
diff changeset
  6370
    {
hgs
parents:
diff changeset
  6371
    TInt zoomValue = EAknUiZoomAutomatic;
hgs
parents:
diff changeset
  6372
    CRepository* repository = NULL;
hgs
parents:
diff changeset
  6373
    TRAPD( ret, repository = CRepository::NewL(KCRUidMuiuSettings) );
hgs
parents:
diff changeset
  6374
    if ( ret == KErrNone )
hgs
parents:
diff changeset
  6375
        {
hgs
parents:
diff changeset
  6376
        CleanupStack::PushL( repository );
hgs
parents:
diff changeset
  6377
        if ( repository->Get(KMuiuZoomValue, zoomValue) != KErrNone )
hgs
parents:
diff changeset
  6378
            {
hgs
parents:
diff changeset
  6379
            zoomValue = EAknUiZoomAutomatic;
hgs
parents:
diff changeset
  6380
            }
hgs
parents:
diff changeset
  6381
        CleanupStack::PopAndDestroy( repository );
hgs
parents:
diff changeset
  6382
        }
hgs
parents:
diff changeset
  6383
    return (TAknUiZoom) zoomValue;
hgs
parents:
diff changeset
  6384
    }
hgs
parents:
diff changeset
  6385
hgs
parents:
diff changeset
  6386
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6387
// CMceUi::WriteZoomLevelL
hgs
parents:
diff changeset
  6388
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6389
void CMceUi::WriteZoomLevelL( TAknUiZoom aZoomLevel )
hgs
parents:
diff changeset
  6390
    {
hgs
parents:
diff changeset
  6391
    CRepository* repository = NULL;
hgs
parents:
diff changeset
  6392
    TRAPD( ret, repository = CRepository::NewL(KCRUidMuiuSettings) );
hgs
parents:
diff changeset
  6393
    if ( ret == KErrNone )
hgs
parents:
diff changeset
  6394
        {
hgs
parents:
diff changeset
  6395
        CleanupStack::PushL( repository );
hgs
parents:
diff changeset
  6396
        if ( repository->Set(KMuiuZoomValue, aZoomLevel) != KErrNone )
hgs
parents:
diff changeset
  6397
            {
hgs
parents:
diff changeset
  6398
            // hmm, just ignore?
hgs
parents:
diff changeset
  6399
            }
hgs
parents:
diff changeset
  6400
        CleanupStack::PopAndDestroy( repository );
hgs
parents:
diff changeset
  6401
        }
hgs
parents:
diff changeset
  6402
    }
hgs
parents:
diff changeset
  6403
hgs
parents:
diff changeset
  6404
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6405
// CMceUi::HandleZoomLevelChangeL
hgs
parents:
diff changeset
  6406
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6407
void CMceUi::HandleZoomLevelChangeL( TInt aCommand )
hgs
parents:
diff changeset
  6408
    {
hgs
parents:
diff changeset
  6409
    TAknUiZoom uiZoom;
hgs
parents:
diff changeset
  6410
    switch ( aCommand )
hgs
parents:
diff changeset
  6411
        {
hgs
parents:
diff changeset
  6412
        default:
hgs
parents:
diff changeset
  6413
        case EMceCmdZoomValueAutomatic:
hgs
parents:
diff changeset
  6414
           uiZoom = EAknUiZoomAutomatic;
hgs
parents:
diff changeset
  6415
           break;
hgs
parents:
diff changeset
  6416
        case EMceCmdZoomValueLarge:
hgs
parents:
diff changeset
  6417
           uiZoom = EAknUiZoomLarge;
hgs
parents:
diff changeset
  6418
           break;
hgs
parents:
diff changeset
  6419
        case EMceCmdZoomValueMedium:
hgs
parents:
diff changeset
  6420
           uiZoom = EAknUiZoomNormal;
hgs
parents:
diff changeset
  6421
           break;
hgs
parents:
diff changeset
  6422
        case EMceCmdZoomValueSmall:
hgs
parents:
diff changeset
  6423
           uiZoom = EAknUiZoomSmall;
hgs
parents:
diff changeset
  6424
           break;
hgs
parents:
diff changeset
  6425
        }
hgs
parents:
diff changeset
  6426
hgs
parents:
diff changeset
  6427
    TAknUiZoom previousZoom = ZoomLevelChangedL( uiZoom );
hgs
parents:
diff changeset
  6428
    if ( previousZoom != uiZoom )
hgs
parents:
diff changeset
  6429
        {
hgs
parents:
diff changeset
  6430
        WriteZoomLevelL( uiZoom );
hgs
parents:
diff changeset
  6431
        }
hgs
parents:
diff changeset
  6432
    }
hgs
parents:
diff changeset
  6433
hgs
parents:
diff changeset
  6434
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6435
// CMceUi::HandleZoomSubMenu
hgs
parents:
diff changeset
  6436
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6437
void CMceUi::HandleZoomSubMenu( CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
  6438
    {
hgs
parents:
diff changeset
  6439
    TAknUiZoom currentLevel = LocalUiZoom();
hgs
parents:
diff changeset
  6440
    TInt buttonId = EMceCmdZoomValueAutomatic;
hgs
parents:
diff changeset
  6441
    switch ( currentLevel )
hgs
parents:
diff changeset
  6442
        {
hgs
parents:
diff changeset
  6443
        default:
hgs
parents:
diff changeset
  6444
        case EAknUiZoomAutomatic:
hgs
parents:
diff changeset
  6445
            buttonId = EMceCmdZoomValueAutomatic;
hgs
parents:
diff changeset
  6446
            break;
hgs
parents:
diff changeset
  6447
        case EAknUiZoomLarge:
hgs
parents:
diff changeset
  6448
            buttonId = EMceCmdZoomValueLarge;
hgs
parents:
diff changeset
  6449
            break;
hgs
parents:
diff changeset
  6450
        case EAknUiZoomNormal:
hgs
parents:
diff changeset
  6451
            buttonId = EMceCmdZoomValueMedium;
hgs
parents:
diff changeset
  6452
            break;
hgs
parents:
diff changeset
  6453
        case EAknUiZoomSmall:
hgs
parents:
diff changeset
  6454
            buttonId = EMceCmdZoomValueSmall;
hgs
parents:
diff changeset
  6455
            break;
hgs
parents:
diff changeset
  6456
        }
hgs
parents:
diff changeset
  6457
    aMenuPane->SetItemButtonState( buttonId, EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
  6458
    }
hgs
parents:
diff changeset
  6459
hgs
parents:
diff changeset
  6460
// ----------------------------------------------------
hgs
parents:
diff changeset
  6461
// CMceUi::ForwardL
hgs
parents:
diff changeset
  6462
//
hgs
parents:
diff changeset
  6463
// ----------------------------------------------------
hgs
parents:
diff changeset
  6464
void CMceUi::ForwardL(TInt /*aForwardCommand*/)
hgs
parents:
diff changeset
  6465
    {
hgs
parents:
diff changeset
  6466
    MCELOGGER_ENTERFN( "MceUi::ForwardL()----Start>>>>" );
hgs
parents:
diff changeset
  6467
hgs
parents:
diff changeset
  6468
    LeaveIfDiskSpaceUnderCriticalLevelL( iDiskSpaceForMoveOrCopy );
hgs
parents:
diff changeset
  6469
hgs
parents:
diff changeset
  6470
    if ( MceViewActive( EMceMainViewActive ) )
hgs
parents:
diff changeset
  6471
        {
hgs
parents:
diff changeset
  6472
        return;
hgs
parents:
diff changeset
  6473
        }
hgs
parents:
diff changeset
  6474
hgs
parents:
diff changeset
  6475
    CMsvEntrySelection * selection = iMceListView->ListContainer()->CurrentItemSelectionL();
hgs
parents:
diff changeset
  6476
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  6477
    if ( selection->Count() <= 0)
hgs
parents:
diff changeset
  6478
        {
hgs
parents:
diff changeset
  6479
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  6480
        return;
hgs
parents:
diff changeset
  6481
        }
hgs
parents:
diff changeset
  6482
hgs
parents:
diff changeset
  6483
    TMsvEntry entry;
hgs
parents:
diff changeset
  6484
    TMsvId serviceId;
hgs
parents:
diff changeset
  6485
    User::LeaveIfError( iSession->GetEntry(selection->At(0),serviceId,entry) );
hgs
parents:
diff changeset
  6486
    CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  6487
hgs
parents:
diff changeset
  6488
    TMsvPartList parts = KMsvMessagePartBody | KMsvMessagePartOriginator | KMsvMessagePartDescription | KMsvMessagePartAttachments;
hgs
parents:
diff changeset
  6489
hgs
parents:
diff changeset
  6490
    CBaseMtmUi& ui=iMtmStore->GetMtmUiAndSetContextLC( entry );
hgs
parents:
diff changeset
  6491
    ui.SetPreferences( ui.Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
  6492
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  6493
    CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  6494
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  6495
hgs
parents:
diff changeset
  6496
    CMsvOperation* oper = ui.ForwardL(
hgs
parents:
diff changeset
  6497
        KMsvDraftEntryIdValue, parts, singleOpWatcher->iStatus );
hgs
parents:
diff changeset
  6498
    iEditorOperation = singleOpWatcher;
hgs
parents:
diff changeset
  6499
hgs
parents:
diff changeset
  6500
    CleanupStack::PushL( oper );
hgs
parents:
diff changeset
  6501
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  6502
    CleanupStack::Pop( 2, singleOpWatcher ); // oper
hgs
parents:
diff changeset
  6503
    singleOpWatcher->SetOperation( oper );
hgs
parents:
diff changeset
  6504
    MCELOGGER_WRITE_FORMAT( "iOperations.AppendL(%d)", oper->Id() );
hgs
parents:
diff changeset
  6505
    CleanupStack::PopAndDestroy( 2 ); // CAknInputBlock, ui
hgs
parents:
diff changeset
  6506
hgs
parents:
diff changeset
  6507
    MCELOGGER_LEAVEFN( "MceUi::ForwardL()----End<<<<" );
hgs
parents:
diff changeset
  6508
hgs
parents:
diff changeset
  6509
    }
hgs
parents:
diff changeset
  6510
hgs
parents:
diff changeset
  6511
// ----------------------------------------------------
hgs
parents:
diff changeset
  6512
// CMceUi::HandleNewMsgToInboxL
hgs
parents:
diff changeset
  6513
// Remove New Flag from selected message(s) if there is any
hgs
parents:
diff changeset
  6514
// From 5.0
hgs
parents:
diff changeset
  6515
// ----------------------------------------------------
hgs
parents:
diff changeset
  6516
void CMceUi::HandleNewMsgToInboxL( TBool removeNewFlag, CMsvEntrySelection* aSelection )
hgs
parents:
diff changeset
  6517
    {
hgs
parents:
diff changeset
  6518
    TMsvEntry aEntry;
hgs
parents:
diff changeset
  6519
hgs
parents:
diff changeset
  6520
    if ( !removeNewFlag && ( !iIdArray ) )
hgs
parents:
diff changeset
  6521
        {
hgs
parents:
diff changeset
  6522
        return;
hgs
parents:
diff changeset
  6523
        }
hgs
parents:
diff changeset
  6524
    else if( removeNewFlag )
hgs
parents:
diff changeset
  6525
        {
hgs
parents:
diff changeset
  6526
        if ( iIdArray )
hgs
parents:
diff changeset
  6527
            {
hgs
parents:
diff changeset
  6528
            delete iIdArray;
hgs
parents:
diff changeset
  6529
            iIdArray = NULL;
hgs
parents:
diff changeset
  6530
            }
hgs
parents:
diff changeset
  6531
        iIdArray = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
  6532
        for (TInt i = 0; i < aSelection->Count(); ++i )
hgs
parents:
diff changeset
  6533
            {
hgs
parents:
diff changeset
  6534
            TMsvId selectedId = aSelection->At(i);
hgs
parents:
diff changeset
  6535
            iEntry->SetEntryL( selectedId );
hgs
parents:
diff changeset
  6536
            aEntry = iEntry->Entry();
hgs
parents:
diff changeset
  6537
            if ( aEntry.Unread() )
hgs
parents:
diff changeset
  6538
                {
hgs
parents:
diff changeset
  6539
                iIdArray->AppendL( selectedId );
hgs
parents:
diff changeset
  6540
                aEntry.SetUnread( EFalse );
hgs
parents:
diff changeset
  6541
                iEntry->ChangeL( aEntry );
hgs
parents:
diff changeset
  6542
                }
hgs
parents:
diff changeset
  6543
            }
hgs
parents:
diff changeset
  6544
        if ( iIdArray->Count() )
hgs
parents:
diff changeset
  6545
            {
hgs
parents:
diff changeset
  6546
            iHandleNewMsgToInbox = ETrue;
hgs
parents:
diff changeset
  6547
            }
hgs
parents:
diff changeset
  6548
        }
hgs
parents:
diff changeset
  6549
    else
hgs
parents:
diff changeset
  6550
        {
hgs
parents:
diff changeset
  6551
        for ( TInt i = 0; i < iIdArray->Count(); ++i )
hgs
parents:
diff changeset
  6552
            {
hgs
parents:
diff changeset
  6553
            iEntry->SetEntryL( iIdArray->At(i) );
hgs
parents:
diff changeset
  6554
            aEntry = iEntry->Entry();
hgs
parents:
diff changeset
  6555
            aEntry.SetUnread( ETrue );
hgs
parents:
diff changeset
  6556
            iEntry->ChangeL( aEntry );
hgs
parents:
diff changeset
  6557
            }
hgs
parents:
diff changeset
  6558
        delete iIdArray;
hgs
parents:
diff changeset
  6559
        iIdArray = NULL;
hgs
parents:
diff changeset
  6560
        iHandleNewMsgToInbox = EFalse;
hgs
parents:
diff changeset
  6561
        }
hgs
parents:
diff changeset
  6562
    }
hgs
parents:
diff changeset
  6563
hgs
parents:
diff changeset
  6564
hgs
parents:
diff changeset
  6565
// ----------------------------------------------------
hgs
parents:
diff changeset
  6566
// TBool CMceUi::HasNewEmailL
hgs
parents:
diff changeset
  6567
// Check if there is new email the the folder
hgs
parents:
diff changeset
  6568
// public
hgs
parents:
diff changeset
  6569
// ----------------------------------------------------
hgs
parents:
diff changeset
  6570
TBool CMceUi::HasNewEmailL( TMsvId aFolderId )
hgs
parents:
diff changeset
  6571
    {
hgs
parents:
diff changeset
  6572
    CMsvEntry* entry = iSession->GetEntryL( aFolderId );
hgs
parents:
diff changeset
  6573
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  6574
hgs
parents:
diff changeset
  6575
    TBool newEmail = EFalse;
hgs
parents:
diff changeset
  6576
    const TInt count = entry->Count();
hgs
parents:
diff changeset
  6577
    for ( TInt loop = 0; loop < count ; loop++ )
hgs
parents:
diff changeset
  6578
        {
hgs
parents:
diff changeset
  6579
        if ( (*entry)[loop].iType.iUid != KUidMsvFolderEntryValue )
hgs
parents:
diff changeset
  6580
            {
hgs
parents:
diff changeset
  6581
            if ( (*entry)[loop].New() )
hgs
parents:
diff changeset
  6582
                {
hgs
parents:
diff changeset
  6583
                newEmail = ETrue;
hgs
parents:
diff changeset
  6584
                break;
hgs
parents:
diff changeset
  6585
                }
hgs
parents:
diff changeset
  6586
            }
hgs
parents:
diff changeset
  6587
        }
hgs
parents:
diff changeset
  6588
    CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  6589
    return newEmail;
hgs
parents:
diff changeset
  6590
    }
hgs
parents:
diff changeset
  6591
hgs
parents:
diff changeset
  6592
// ----------------------------------------------------
hgs
parents:
diff changeset
  6593
// void CMceUi::SetDiskSpaceForMoveOrCopyL
hgs
parents:
diff changeset
  6594
// Reads critical and warning levels from cenrep
hgs
parents:
diff changeset
  6595
// ----------------------------------------------------
hgs
parents:
diff changeset
  6596
void CMceUi::SetDiskSpaceForMoveOrCopyL( )
hgs
parents:
diff changeset
  6597
    {
hgs
parents:
diff changeset
  6598
    // If can't open cenrep use default value
hgs
parents:
diff changeset
  6599
    iDiskSpaceForMoveOrCopy = KMceDiskSpaceForMoveOrCopy;
hgs
parents:
diff changeset
  6600
    TInt diskWarningThreshold = 0;
hgs
parents:
diff changeset
  6601
    TInt diskCriticalThreshold = 0;
hgs
parents:
diff changeset
  6602
    
hgs
parents:
diff changeset
  6603
    CRepository* repository = NULL;
hgs
parents:
diff changeset
  6604
    TRAPD( ret, repository = CRepository::NewL( KCRUidUiklaf ) );
hgs
parents:
diff changeset
  6605
hgs
parents:
diff changeset
  6606
    if ( ret == KErrNone )
hgs
parents:
diff changeset
  6607
        {
hgs
parents:
diff changeset
  6608
        CleanupStack::PushL( repository );
hgs
parents:
diff changeset
  6609
        if ( repository->Get( KUikOODDiskWarningThreshold, 
hgs
parents:
diff changeset
  6610
             diskWarningThreshold ) == KErrNone && 
hgs
parents:
diff changeset
  6611
             repository->Get( KUikOODDiskCriticalThreshold,
hgs
parents:
diff changeset
  6612
             diskCriticalThreshold ) == KErrNone )
hgs
parents:
diff changeset
  6613
            {
hgs
parents:
diff changeset
  6614
            iDiskSpaceForMoveOrCopy = diskWarningThreshold 
hgs
parents:
diff changeset
  6615
            - diskCriticalThreshold;        
hgs
parents:
diff changeset
  6616
            }
hgs
parents:
diff changeset
  6617
        CleanupStack::PopAndDestroy( repository );
hgs
parents:
diff changeset
  6618
        }
hgs
parents:
diff changeset
  6619
hgs
parents:
diff changeset
  6620
    }
hgs
parents:
diff changeset
  6621
// ----------------------------------------------------
hgs
parents:
diff changeset
  6622
// CMceUi::LaunchUniEditorL
hgs
parents:
diff changeset
  6623
// ----------------------------------------------------
hgs
parents:
diff changeset
  6624
//    
hgs
parents:
diff changeset
  6625
void CMceUi::LaunchUniEditorL()
hgs
parents:
diff changeset
  6626
    {
hgs
parents:
diff changeset
  6627
    //KUidUniMtm 0x102072D6
hgs
parents:
diff changeset
  6628
    CreateNewMessageL( KSenduiMtmUniMessageUidValue ); 
hgs
parents:
diff changeset
  6629
    }    
hgs
parents:
diff changeset
  6630
    
hgs
parents:
diff changeset
  6631
// ----------------------------------------------------
hgs
parents:
diff changeset
  6632
// CMceUi::GetToBeCreatedEmailType
hgs
parents:
diff changeset
  6633
// ----------------------------------------------------
hgs
parents:
diff changeset
  6634
//
hgs
parents:
diff changeset
  6635
 TInt CMceUi::GetToBeCreatedEmailType ()
hgs
parents:
diff changeset
  6636
    {
hgs
parents:
diff changeset
  6637
    // not sure if it's save
hgs
parents:
diff changeset
  6638
    TInt messageType = KErrNone;
hgs
parents:
diff changeset
  6639
    if ( MceViewActive( EMceMessageViewActive ) && iMceListView )
hgs
parents:
diff changeset
  6640
        {
hgs
parents:
diff changeset
  6641
        const TMsvEntry& entry = iMceListView->ListContainer()->FolderEntry();
hgs
parents:
diff changeset
  6642
        if ( entry.iMtm == KSenduiMtmImap4Uid
hgs
parents:
diff changeset
  6643
            || entry.iMtm == KSenduiMtmPop3Uid ) 
hgs
parents:
diff changeset
  6644
            {
hgs
parents:
diff changeset
  6645
            messageType = KSenduiMtmSmtpUidValue;
hgs
parents:
diff changeset
  6646
            }
hgs
parents:
diff changeset
  6647
        else
hgs
parents:
diff changeset
  6648
            {
hgs
parents:
diff changeset
  6649
             messageType = entry.iMtm.iUid;
hgs
parents:
diff changeset
  6650
            }
hgs
parents:
diff changeset
  6651
        }
hgs
parents:
diff changeset
  6652
    return messageType;
hgs
parents:
diff changeset
  6653
    }
hgs
parents:
diff changeset
  6654
    
hgs
parents:
diff changeset
  6655
// ----------------------------------------------------
hgs
parents:
diff changeset
  6656
// CMceUi::HideOrExit
hgs
parents:
diff changeset
  6657
// ----------------------------------------------------
hgs
parents:
diff changeset
  6658
void CMceUi::HideOrExit()
hgs
parents:
diff changeset
  6659
    {
hgs
parents:
diff changeset
  6660
    SetDontExitOnNextOperationComplete();
hgs
parents:
diff changeset
  6661
    iMceUiFlags.ClearMceFlag( EMceUiFlagsWantToExit );
hgs
parents:
diff changeset
  6662
    if (ExitHidesInBackground())
hgs
parents:
diff changeset
  6663
        {
hgs
parents:
diff changeset
  6664
        // Always use exit effect even if this is actually application switch
hgs
parents:
diff changeset
  6665
		// Note: Not allowed to call GfxTransEffect::EndFullScreen() as AVKON takes care of that when
hgs
parents:
diff changeset
  6666
		// EApplicationExit context is used!  
hgs
parents:
diff changeset
  6667
		// Set effect begin point
hgs
parents:
diff changeset
  6668
		GfxTransEffect::BeginFullScreen( AknTransEffect::EApplicationExit, TRect(), 
hgs
parents:
diff changeset
  6669
			AknTransEffect::EParameterType, AknTransEffect::GfxTransParam(TUid::Uid( KMceApplicationUidValue )) );       
hgs
parents:
diff changeset
  6670
hgs
parents:
diff changeset
  6671
        ResetAndHide();
hgs
parents:
diff changeset
  6672
        }
hgs
parents:
diff changeset
  6673
    else
hgs
parents:
diff changeset
  6674
        {
hgs
parents:
diff changeset
  6675
        CAknEnv::RunAppShutter();
hgs
parents:
diff changeset
  6676
        }
hgs
parents:
diff changeset
  6677
    }
hgs
parents:
diff changeset
  6678
hgs
parents:
diff changeset
  6679
// ----------------------------------------------------
hgs
parents:
diff changeset
  6680
// CMceUi::ResetAndHide
hgs
parents:
diff changeset
  6681
// ----------------------------------------------------
hgs
parents:
diff changeset
  6682
void CMceUi::ResetAndHide()
hgs
parents:
diff changeset
  6683
    {
hgs
parents:
diff changeset
  6684
    if( MceViewActive( EMceMessageViewActive ) && iMceListView
hgs
parents:
diff changeset
  6685
            && iMceListView->MarkingMode() )
hgs
parents:
diff changeset
  6686
        {
hgs
parents:
diff changeset
  6687
        iMceListView->SetMarkingModeOff();
hgs
parents:
diff changeset
  6688
        iMceListView->SetMarkingMode( EFalse );
hgs
parents:
diff changeset
  6689
        RemoveTabs();
hgs
parents:
diff changeset
  6690
        delete iDecoratedTabGroup;
hgs
parents:
diff changeset
  6691
        iDecoratedTabGroup = NULL;
hgs
parents:
diff changeset
  6692
        delete iTabsArray;
hgs
parents:
diff changeset
  6693
        iTabsArray = NULL;
hgs
parents:
diff changeset
  6694
        SetCustomControl(1);    // Disable bring-to-foreground on view activation
hgs
parents:
diff changeset
  6695
        TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( \
hgs
parents:
diff changeset
  6696
            KMessagingCentreMainViewUid, \
hgs
parents:
diff changeset
  6697
            TUid::Uid(KMceHideInBackground), \
hgs
parents:
diff changeset
  6698
            KNullDesC8 ) ) ;
hgs
parents:
diff changeset
  6699
        }    
hgs
parents:
diff changeset
  6700
    // Messaging was not exiting properly when "exit" is pressed from settings dialog.
hgs
parents:
diff changeset
  6701
    // iMceUiFlags.MceFlag( EMceUiFlagsSettingsDialogOpen ) will be true 
hgs
parents:
diff changeset
  6702
    // when we exit from any of the settings Dialog. 
hgs
parents:
diff changeset
  6703
    // Closing of Settings dialogs will be taken care by AVKON. 
hgs
parents:
diff changeset
  6704
    else if (!(MceViewActive( EMceMainViewActive) && IsForeground()) ||  
hgs
parents:
diff changeset
  6705
	      iMceUiFlags.MceFlag( EMceUiFlagsSettingsDialogOpen ) || iSimDialogOpen )
hgs
parents:
diff changeset
  6706
        {
hgs
parents:
diff changeset
  6707
        SetCustomControl(1);    // Disable bring-to-foreground on view activation
hgs
parents:
diff changeset
  6708
        TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( \
hgs
parents:
diff changeset
  6709
            KMessagingCentreMainViewUid, \
hgs
parents:
diff changeset
  6710
            TUid::Uid(KMceHideInBackground), \
hgs
parents:
diff changeset
  6711
            KNullDesC8 ) ) ;
hgs
parents:
diff changeset
  6712
        iSimDialogOpen = EFalse;
hgs
parents:
diff changeset
  6713
        }
hgs
parents:
diff changeset
  6714
    else
hgs
parents:
diff changeset
  6715
        {
hgs
parents:
diff changeset
  6716
        SetCustomControl(0); // Enable bring-to-foreground on view activation
hgs
parents:
diff changeset
  6717
        }
hgs
parents:
diff changeset
  6718
    HideInBackground();
hgs
parents:
diff changeset
  6719
    }
hgs
parents:
diff changeset
  6720
hgs
parents:
diff changeset
  6721
// ----------------------------------------------------
hgs
parents:
diff changeset
  6722
// CMceUi::OpenMtmMailboxViewL
hgs
parents:
diff changeset
  6723
// ----------------------------------------------------
hgs
parents:
diff changeset
  6724
void CMceUi::OpenMtmMailboxViewL( const TMsvEntry& aEntry )
hgs
parents:
diff changeset
  6725
	{
hgs
parents:
diff changeset
  6726
    CBaseMtmUi& mtmUi=iMtmStore->GetMtmUiAndSetContextLC( aEntry );
hgs
parents:
diff changeset
  6727
hgs
parents:
diff changeset
  6728
    CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  6729
    CleanupStack::PushL( singleOpWatcher );
hgs
parents:
diff changeset
  6730
hgs
parents:
diff changeset
  6731
    CMsvOperation* op = NULL;
hgs
parents:
diff changeset
  6732
    TRAP_IGNORE(  op=mtmUi.OpenL(singleOpWatcher->iStatus )  );
hgs
parents:
diff changeset
  6733
    
hgs
parents:
diff changeset
  6734
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  6735
    iOperations.AppendL( singleOpWatcher );
hgs
parents:
diff changeset
  6736
    CleanupStack::Pop( op );
hgs
parents:
diff changeset
  6737
    CleanupStack::Pop( singleOpWatcher );
hgs
parents:
diff changeset
  6738
    
hgs
parents:
diff changeset
  6739
    singleOpWatcher->SetOperation( op );
hgs
parents:
diff changeset
  6740
    
hgs
parents:
diff changeset
  6741
    // Destroys mtmUi object insted of PopAndDestroy
hgs
parents:
diff changeset
  6742
    iMtmStore->ReleaseMtmUi( mtmUi.Type() );
hgs
parents:
diff changeset
  6743
	}
hgs
parents:
diff changeset
  6744
hgs
parents:
diff changeset
  6745
// ----------------------------------------------------
hgs
parents:
diff changeset
  6746
// CMceUi::FindMtmInVisibleListL
hgs
parents:
diff changeset
  6747
// ----------------------------------------------------
hgs
parents:
diff changeset
  6748
TBool CMceUi::FindMtmInVisibleListL( TUid aMtm, CArrayFix<TUid>& aListItemUids )
hgs
parents:
diff changeset
  6749
    {
hgs
parents:
diff changeset
  6750
    for ( TInt i = 0 ; i < aListItemUids.Count() ; i++)
hgs
parents:
diff changeset
  6751
        {
hgs
parents:
diff changeset
  6752
        if( aMtm == aListItemUids[i] )
hgs
parents:
diff changeset
  6753
            {
hgs
parents:
diff changeset
  6754
            return ETrue;
hgs
parents:
diff changeset
  6755
            }
hgs
parents:
diff changeset
  6756
        }
hgs
parents:
diff changeset
  6757
    return EFalse;
hgs
parents:
diff changeset
  6758
    }
hgs
parents:
diff changeset
  6759
// ----------------------------------------------------
hgs
parents:
diff changeset
  6760
// CMceUi::GetMsgDeletedStatus
hgs
parents:
diff changeset
  6761
// ----------------------------------------------------    
hgs
parents:
diff changeset
  6762
TInt CMceUi::GetMsgDeletedStatus()
hgs
parents:
diff changeset
  6763
    {
hgs
parents:
diff changeset
  6764
    return iMsgDeletedStatus;	
hgs
parents:
diff changeset
  6765
    }
hgs
parents:
diff changeset
  6766
// ----------------------------------------------------
hgs
parents:
diff changeset
  6767
// CMceUi::SetMsgDeletedStatus
hgs
parents:
diff changeset
  6768
// ----------------------------------------------------
hgs
parents:
diff changeset
  6769
void CMceUi::SetMsgDeletedStatus(TBool aStatus)
hgs
parents:
diff changeset
  6770
    {
hgs
parents:
diff changeset
  6771
    iMsgDeletedStatus = aStatus;	
hgs
parents:
diff changeset
  6772
    }
hgs
parents:
diff changeset
  6773
hgs
parents:
diff changeset
  6774
// ----------------------------------------------------
hgs
parents:
diff changeset
  6775
// CMceUi::GetFsIntegratedEmailAppMtmPluginId
hgs
parents:
diff changeset
  6776
// ----------------------------------------------------
hgs
parents:
diff changeset
  6777
TUid CMceUi::GetFsIntegratedEmailAppMtmPluginId()
hgs
parents:
diff changeset
  6778
    {
hgs
parents:
diff changeset
  6779
    TUid uidMsgValTypeEmailMtmVal = TUid::Uid(0);
hgs
parents:
diff changeset
  6780
     if ( (iEmailClientIntegration )&& (!iEmailFramework))
hgs
parents:
diff changeset
  6781
        {
hgs
parents:
diff changeset
  6782
        CRepository* repository = NULL;
hgs
parents:
diff changeset
  6783
        TInt mtmPluginID = 0;
hgs
parents:
diff changeset
  6784
        TRAPD( ret, repository = CRepository::NewL(
hgs
parents:
diff changeset
  6785
                                 KCRUidSelectableDefaultEmailSettings ) );
hgs
parents:
diff changeset
  6786
        
hgs
parents:
diff changeset
  6787
        if ( ret == KErrNone )
hgs
parents:
diff changeset
  6788
            {
hgs
parents:
diff changeset
  6789
            // Get Email application mtm plugin ID
hgs
parents:
diff changeset
  6790
            repository->Get( KIntegratedEmailAppMtmPluginId, mtmPluginID );
hgs
parents:
diff changeset
  6791
            }
hgs
parents:
diff changeset
  6792
        delete repository;
hgs
parents:
diff changeset
  6793
        uidMsgValTypeEmailMtmVal = TUid::Uid( mtmPluginID );       
hgs
parents:
diff changeset
  6794
        }
hgs
parents:
diff changeset
  6795
     return uidMsgValTypeEmailMtmVal;
hgs
parents:
diff changeset
  6796
    }
hgs
parents:
diff changeset
  6797
//CR:422-271
hgs
parents:
diff changeset
  6798
// ----------------------------------------------------
hgs
parents:
diff changeset
  6799
// CMceUi::PopulateMMSTemplates
hgs
parents:
diff changeset
  6800
// ----------------------------------------------------
hgs
parents:
diff changeset
  6801
TInt CMceUi::PopulateMMSTemplates()
hgs
parents:
diff changeset
  6802
    {
hgs
parents:
diff changeset
  6803
hgs
parents:
diff changeset
  6804
    TInt error = KErrNone;
hgs
parents:
diff changeset
  6805
    TInt numErrors = 0;
hgs
parents:
diff changeset
  6806
    TInt errorIncrement = 0;
hgs
parents:
diff changeset
  6807
    
hgs
parents:
diff changeset
  6808
    //first try if the directory of mms dump exists or not
hgs
parents:
diff changeset
  6809
    _LIT(KTopDir,"C:\\Private\\1000484b\\");
hgs
parents:
diff changeset
  6810
      
hgs
parents:
diff changeset
  6811
    _LIT( KWild, "mmsvar" );
hgs
parents:
diff changeset
  6812
hgs
parents:
diff changeset
  6813
    TFindFile finder( iFs );
hgs
parents:
diff changeset
  6814
    error = finder.FindByDir(KWild,KTopDir);
hgs
parents:
diff changeset
  6815
hgs
parents:
diff changeset
  6816
    if ( error !=KErrNone )
hgs
parents:
diff changeset
  6817
        {
hgs
parents:
diff changeset
  6818
        return -1;
hgs
parents:
diff changeset
  6819
        }
hgs
parents:
diff changeset
  6820
    // Reset inactivity timer to keep viewServer from crashing  
hgs
parents:
diff changeset
  6821
    User::ResetInactivityTime();
hgs
parents:
diff changeset
  6822
    
hgs
parents:
diff changeset
  6823
    TFileName CurrentPath;
hgs
parents:
diff changeset
  6824
    CurrentPath.Copy( KMmsMessageDumpDirectory );
hgs
parents:
diff changeset
  6825
    
hgs
parents:
diff changeset
  6826
    TRAP( error, errorIncrement = DecodeAllMMSFromDirectoryL( CurrentPath,KMsvGlobalInBoxIndexEntryId) );
hgs
parents:
diff changeset
  6827
    numErrors += errorIncrement;
hgs
parents:
diff changeset
  6828
    if ( error != KErrNone )
hgs
parents:
diff changeset
  6829
        {
hgs
parents:
diff changeset
  6830
      //"left with error "
hgs
parents:
diff changeset
  6831
        	numErrors++;
hgs
parents:
diff changeset
  6832
        	error = KErrNone;
hgs
parents:
diff changeset
  6833
        }
hgs
parents:
diff changeset
  6834
    if ( errorIncrement > 0 )
hgs
parents:
diff changeset
  6835
        {
hgs
parents:
diff changeset
  6836
        //("- returned errors")
hgs
parents:
diff changeset
  6837
        }
hgs
parents:
diff changeset
  6838
	User::ResetInactivityTime();
hgs
parents:
diff changeset
  6839
	return numErrors;
hgs
parents:
diff changeset
  6840
}
hgs
parents:
diff changeset
  6841
// ----------------------------------------------------
hgs
parents:
diff changeset
  6842
// CMceUi::DecodeAllMMSFromDirectoryL
hgs
parents:
diff changeset
  6843
// ----------------------------------------------------
hgs
parents:
diff changeset
  6844
TInt CMceUi::DecodeAllMMSFromDirectoryL( TFileName& aFilePath, TMsvId aBoxid /*= KMsvGlobalInBoxIndexEntryId*/ )
hgs
parents:
diff changeset
  6845
    {
hgs
parents:
diff changeset
  6846
    TInt numErrors = 0;
hgs
parents:
diff changeset
  6847
    TInt error = KErrNone;
hgs
parents:
diff changeset
  6848
    _LIT( KWild, "*" );
hgs
parents:
diff changeset
  6849
hgs
parents:
diff changeset
  6850
    CDir* fileList = NULL;
hgs
parents:
diff changeset
  6851
    TInt i = 0;  // general counter
hgs
parents:
diff changeset
  6852
    TFileName Filename;
hgs
parents:
diff changeset
  6853
    TFileName CurrentPath = aFilePath;
hgs
parents:
diff changeset
  6854
    if ( CurrentPath[CurrentPath.Length()-1] != '\\' )
hgs
parents:
diff changeset
  6855
    CurrentPath.Append( '\\' );
hgs
parents:
diff changeset
  6856
    iFs.SetSessionPath( CurrentPath );
hgs
parents:
diff changeset
  6857
hgs
parents:
diff changeset
  6858
    TFindFile finder( iFs );
hgs
parents:
diff changeset
  6859
    error = finder.FindWildByPath( KWild, NULL, fileList );
hgs
parents:
diff changeset
  6860
    CleanupStack::PushL( fileList );
hgs
parents:
diff changeset
  6861
    TInt fileCounter = 0;
hgs
parents:
diff changeset
  6862
hgs
parents:
diff changeset
  6863
    if ( error == KErrNone )
hgs
parents:
diff changeset
  6864
        {
hgs
parents:
diff changeset
  6865
        fileCounter = fileList->Count();
hgs
parents:
diff changeset
  6866
        }
hgs
parents:
diff changeset
  6867
    TEntry entry;
hgs
parents:
diff changeset
  6868
hgs
parents:
diff changeset
  6869
    if ( error == KErrNone )
hgs
parents:
diff changeset
  6870
        {
hgs
parents:
diff changeset
  6871
        for ( i = 0; i < fileCounter; i++ )
hgs
parents:
diff changeset
  6872
            {
hgs
parents:
diff changeset
  6873
            // Reset inactivity timer to keep viewServer from crashing  
hgs
parents:
diff changeset
  6874
            User::ResetInactivityTime();
hgs
parents:
diff changeset
  6875
            entry = (*fileList)[i]; // name is entry.iName
hgs
parents:
diff changeset
  6876
            Filename.Copy( entry.iName );
hgs
parents:
diff changeset
  6877
            if (!entry.IsDir())
hgs
parents:
diff changeset
  6878
                {
hgs
parents:
diff changeset
  6879
                TRAP( error, DecodeMMSFromFileL( Filename, aBoxid ));
hgs
parents:
diff changeset
  6880
                if ( error != KErrNone )
hgs
parents:
diff changeset
  6881
                    {
hgs
parents:
diff changeset
  6882
                        //There are errors in decoding the files
hgs
parents:
diff changeset
  6883
                    }
hgs
parents:
diff changeset
  6884
                iFs.Delete(entry.iName);
hgs
parents:
diff changeset
  6885
                }
hgs
parents:
diff changeset
  6886
hgs
parents:
diff changeset
  6887
             }
hgs
parents:
diff changeset
  6888
            
hgs
parents:
diff changeset
  6889
        }
hgs
parents:
diff changeset
  6890
hgs
parents:
diff changeset
  6891
    CleanupStack::PopAndDestroy(); // fileList
hgs
parents:
diff changeset
  6892
    fileList = NULL;
hgs
parents:
diff changeset
  6893
hgs
parents:
diff changeset
  6894
    return numErrors;
hgs
parents:
diff changeset
  6895
    }
hgs
parents:
diff changeset
  6896
// ----------------------------------------------------
hgs
parents:
diff changeset
  6897
// CMceUi::DecodeFromFileL
hgs
parents:
diff changeset
  6898
// ----------------------------------------------------
hgs
parents:
diff changeset
  6899
TInt CMceUi::DecodeMMSFromFileL( TFileName& aFilePath, TMsvId aBoxId /* KMsvGlobalInBoxIndexEntryId*/, TUint32 aFlags /*= 0*/ )
hgs
parents:
diff changeset
  6900
    {
hgs
parents:
diff changeset
  6901
    TInt numErrors = 0;
hgs
parents:
diff changeset
  6902
    TInt error = KErrNone;
hgs
parents:
diff changeset
  6903
    TMsvId id;
hgs
parents:
diff changeset
  6904
        
hgs
parents:
diff changeset
  6905
    FillBufferFromFileL( aFilePath, iFs, iEncodeBuffer );
hgs
parents:
diff changeset
  6906
        
hgs
parents:
diff changeset
  6907
    CMmsCodecClient* codecClient = CMmsCodecClient::NewL( *iSession );
hgs
parents:
diff changeset
  6908
    CleanupStack::PushL( codecClient );
hgs
parents:
diff changeset
  6909
    
hgs
parents:
diff changeset
  6910
    TBool unread = EFalse;
hgs
parents:
diff changeset
  6911
    
hgs
parents:
diff changeset
  6912
    TRAP( error, codecClient->InitializeChunkedAddingL( aBoxId, id, aFlags, unread ) ); 
hgs
parents:
diff changeset
  6913
    if ( error != KErrNone )
hgs
parents:
diff changeset
  6914
        {
hgs
parents:
diff changeset
  6915
        numErrors++;
hgs
parents:
diff changeset
  6916
        }
hgs
parents:
diff changeset
  6917
    
hgs
parents:
diff changeset
  6918
    if ( error == KErrNone )
hgs
parents:
diff changeset
  6919
        {
hgs
parents:
diff changeset
  6920
        error = FeedDataInChunks( codecClient );
hgs
parents:
diff changeset
  6921
        }
hgs
parents:
diff changeset
  6922
        
hgs
parents:
diff changeset
  6923
    if ( error != KErrNone )
hgs
parents:
diff changeset
  6924
        {
hgs
parents:
diff changeset
  6925
        numErrors++;
hgs
parents:
diff changeset
  6926
        }
hgs
parents:
diff changeset
  6927
    
hgs
parents:
diff changeset
  6928
    // Not needed can be cleaned up
hgs
parents:
diff changeset
  6929
    CMsvEntry* cEntry = iSession->GetEntryL( id );
hgs
parents:
diff changeset
  6930
    TMsvEntry entry = cEntry->Entry();
hgs
parents:
diff changeset
  6931
hgs
parents:
diff changeset
  6932
    entry.SetReadOnly(ETrue);
hgs
parents:
diff changeset
  6933
    entry.iServiceId = KMsvLocalServiceIndexEntryId;
hgs
parents:
diff changeset
  6934
    entry.iMtmData1 = KMmsMessageMRetrieveConf | KMmsMessageMobileTerminated;
hgs
parents:
diff changeset
  6935
    entry.SetUnread(EFalse);
hgs
parents:
diff changeset
  6936
    
hgs
parents:
diff changeset
  6937
    
hgs
parents:
diff changeset
  6938
    cEntry->ChangeL(entry); 
hgs
parents:
diff changeset
  6939
    CleanupStack::PopAndDestroy( codecClient );
hgs
parents:
diff changeset
  6940
       
hgs
parents:
diff changeset
  6941
    return numErrors;
hgs
parents:
diff changeset
  6942
    }
hgs
parents:
diff changeset
  6943
// ----------------------------------------------------
hgs
parents:
diff changeset
  6944
// CMceUi::FeedDataInChunks
hgs
parents:
diff changeset
  6945
// ----------------------------------------------------
hgs
parents:
diff changeset
  6946
TInt CMceUi::FeedDataInChunks( CMmsCodecClient* aCodecClient )
hgs
parents:
diff changeset
  6947
    {
hgs
parents:
diff changeset
  6948
    
hgs
parents:
diff changeset
  6949
    TInt error = KErrNone;
hgs
parents:
diff changeset
  6950
    TInt chunkSize = KMmsCodecClientChunkSize;
hgs
parents:
diff changeset
  6951
    TInt size = iEncodeBuffer->Size();
hgs
parents:
diff changeset
  6952
    
hgs
parents:
diff changeset
  6953
    // Number of full chunks
hgs
parents:
diff changeset
  6954
    TInt chunkNumber = size / chunkSize;
hgs
parents:
diff changeset
  6955
    TInt remainder = size % chunkSize;
hgs
parents:
diff changeset
  6956
    
hgs
parents:
diff changeset
  6957
    TInt pos = 0;    
hgs
parents:
diff changeset
  6958
    TPtrC8 messagePtr( iEncodeBuffer->Ptr( 0 ) );
hgs
parents:
diff changeset
  6959
    
hgs
parents:
diff changeset
  6960
    TBool lastChunk = EFalse;
hgs
parents:
diff changeset
  6961
    TInt i = 0;
hgs
parents:
diff changeset
  6962
    for ( i = 0; i < chunkNumber && error == KErrNone; i++ )
hgs
parents:
diff changeset
  6963
        {
hgs
parents:
diff changeset
  6964
        pos = i * chunkSize;
hgs
parents:
diff changeset
  6965
        TPtrC8 ptr( iEncodeBuffer->Ptr( 0 ).Mid( pos, chunkSize ) );
hgs
parents:
diff changeset
  6966
        error = aCodecClient->NextDataPart( ptr, lastChunk );
hgs
parents:
diff changeset
  6967
        }
hgs
parents:
diff changeset
  6968
        
hgs
parents:
diff changeset
  6969
    // last chunk
hgs
parents:
diff changeset
  6970
    if ( remainder > 0 && error == KErrNone )
hgs
parents:
diff changeset
  6971
        {
hgs
parents:
diff changeset
  6972
        TPtrC8 ptr2( iEncodeBuffer->Ptr( size - remainder ) );
hgs
parents:
diff changeset
  6973
        if ( ptr2.Length() > 0 )
hgs
parents:
diff changeset
  6974
            {
hgs
parents:
diff changeset
  6975
            error = aCodecClient->NextDataPart( ptr2, lastChunk );
hgs
parents:
diff changeset
  6976
            }
hgs
parents:
diff changeset
  6977
        }
hgs
parents:
diff changeset
  6978
        
hgs
parents:
diff changeset
  6979
    lastChunk = ETrue;
hgs
parents:
diff changeset
  6980
    TPtrC8 ptr3;
hgs
parents:
diff changeset
  6981
    if ( error == KErrNone )
hgs
parents:
diff changeset
  6982
        {
hgs
parents:
diff changeset
  6983
        aCodecClient->NextDataPart( ptr3, lastChunk );
hgs
parents:
diff changeset
  6984
        }
hgs
parents:
diff changeset
  6985
    return error;    
hgs
parents:
diff changeset
  6986
    
hgs
parents:
diff changeset
  6987
    }
hgs
parents:
diff changeset
  6988
// ----------------------------------------------------
hgs
parents:
diff changeset
  6989
// CMceUi::FillBufferFromFileL
hgs
parents:
diff changeset
  6990
// ----------------------------------------------------
hgs
parents:
diff changeset
  6991
void CMceUi::FillBufferFromFileL(
hgs
parents:
diff changeset
  6992
    const TDesC& aFilePath,
hgs
parents:
diff changeset
  6993
    RFs& aFs,
hgs
parents:
diff changeset
  6994
    CBufFlat* aEncodeBuffer )
hgs
parents:
diff changeset
  6995
    {
hgs
parents:
diff changeset
  6996
    TInt error = KErrNone;
hgs
parents:
diff changeset
  6997
    TEntry orgEntry;
hgs
parents:
diff changeset
  6998
    error = aFs.Entry( aFilePath, orgEntry );
hgs
parents:
diff changeset
  6999
    TInt size = orgEntry.iSize;
hgs
parents:
diff changeset
  7000
    RFile inFile;
hgs
parents:
diff changeset
  7001
    if ( aEncodeBuffer == NULL )
hgs
parents:
diff changeset
  7002
        {
hgs
parents:
diff changeset
  7003
        aEncodeBuffer = CBufFlat::NewL( size );
hgs
parents:
diff changeset
  7004
        }
hgs
parents:
diff changeset
  7005
    else
hgs
parents:
diff changeset
  7006
        {
hgs
parents:
diff changeset
  7007
        aEncodeBuffer->ResizeL( 0 );
hgs
parents:
diff changeset
  7008
        aEncodeBuffer->ResizeL( size );
hgs
parents:
diff changeset
  7009
        }
hgs
parents:
diff changeset
  7010
hgs
parents:
diff changeset
  7011
    error = inFile.Open( aFs, aFilePath, EFileShareReadersOnly );
hgs
parents:
diff changeset
  7012
    
hgs
parents:
diff changeset
  7013
    TPtr8 ptr = aEncodeBuffer->Ptr( 0 );
hgs
parents:
diff changeset
  7014
    if ( error == KErrNone )
hgs
parents:
diff changeset
  7015
        {
hgs
parents:
diff changeset
  7016
        error = inFile.Read( ptr, size );
hgs
parents:
diff changeset
  7017
        inFile.Close();
hgs
parents:
diff changeset
  7018
        }
hgs
parents:
diff changeset
  7019
    else
hgs
parents:
diff changeset
  7020
        {
hgs
parents:
diff changeset
  7021
        //"*** - can't read file"
hgs
parents:
diff changeset
  7022
        }
hgs
parents:
diff changeset
  7023
    User::LeaveIfError( error );    
hgs
parents:
diff changeset
  7024
    
hgs
parents:
diff changeset
  7025
    }
hgs
parents:
diff changeset
  7026
//CR:422-271
hgs
parents:
diff changeset
  7027
// end of file
hgs
parents:
diff changeset
  7028
hgs
parents:
diff changeset
  7029
// end of file