messagingappbase/mce/src/MceMainViewListItemArray.cpp
author hgs
Wed, 03 Nov 2010 09:52:46 +0530
changeset 79 2981cb3aa489
permissions -rw-r--r--
201041
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
*     Item array for the message items to be displayed by mce.
hgs
parents:
diff changeset
    16
*     Main view items are kept in memory (CArrayFixFlat<TMceListItem>) when created but
hgs
parents:
diff changeset
    17
*     Message view list items are fetched from the msgs when needed in MdcaPoint function
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
hgs
parents:
diff changeset
    23
// INCLUDE FILES
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include <AknUtils.h>       // AknTextUtils
hgs
parents:
diff changeset
    26
#include <mtudcbas.h>
hgs
parents:
diff changeset
    27
#include <msvids.h>
hgs
parents:
diff changeset
    28
#include <NpdApi.h>         // CNotepadApi
hgs
parents:
diff changeset
    29
//#include "MtmRegistryObserver.h" // MMtmUiDataRegistryObserver
hgs
parents:
diff changeset
    30
#include <StringLoader.h>   // StringLoader
hgs
parents:
diff changeset
    31
#include <mce.rsg>
hgs
parents:
diff changeset
    32
#include <SenduiMtmUids.h>  // mtm uids
hgs
parents:
diff changeset
    33
#include <eikenv.h>
hgs
parents:
diff changeset
    34
#include <centralrepository.h>
hgs
parents:
diff changeset
    35
#include <messaginginternalcrkeys.h>
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
#include <MTMStore.h>
hgs
parents:
diff changeset
    39
#include <commonphoneparser.h>
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
#include <aknappui.h>
hgs
parents:
diff changeset
    42
#include <akncontext.h>
hgs
parents:
diff changeset
    43
#include <aknconsts.h>
hgs
parents:
diff changeset
    44
#include <e32math.h>
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    47
#include <featmgr.h>
hgs
parents:
diff changeset
    48
#include <NumberGrouping.h>
hgs
parents:
diff changeset
    49
#include <mmsconst.h>
hgs
parents:
diff changeset
    50
#include <mmsgenutils.h>
hgs
parents:
diff changeset
    51
#include <mmsclient.h>
hgs
parents:
diff changeset
    52
#include <mtclreg.h>
hgs
parents:
diff changeset
    53
#include <muiu.mbg>
hgs
parents:
diff changeset
    54
#include <mtudreg.h>        // CMtmUiDataRegistry
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
// security data caging
hgs
parents:
diff changeset
    57
#include <data_caging_path_literals.hrh>
hgs
parents:
diff changeset
    58
#include <miutset.h>
hgs
parents:
diff changeset
    59
#include <msvapi.h>
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
#include <ImumInternalApi.h>            // CImumInternalApi
hgs
parents:
diff changeset
    62
#include <ImumInSettingsData.h>         // CImumInSettingsData
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
#include <muiuflags.h>
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
#include "MceMainViewListItemArrayIncludes.h"
hgs
parents:
diff changeset
    67
#include <mceextraitems.rsg>
hgs
parents:
diff changeset
    68
//FS Email stuff
hgs
parents:
diff changeset
    69
#include <ImumInHealthServices.h>
hgs
parents:
diff changeset
    70
#include <muiumsvuiserviceutilitiesinternal.h>
hgs
parents:
diff changeset
    71
#include <MessagingDomainCRKeys.h>
hgs
parents:
diff changeset
    72
#include <bautils.h>
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
// CONSTANTS
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// LOCAL CONSTANTS AND MACROS
hgs
parents:
diff changeset
    77
enum
hgs
parents:
diff changeset
    78
    {
hgs
parents:
diff changeset
    79
    KMceListArrayDocAmount = 0x0,
hgs
parents:
diff changeset
    80
    KMceListArrayDocAmountMany,
hgs
parents:
diff changeset
    81
    KMceListArrayDocAmountTemp,
hgs
parents:
diff changeset
    82
    KMceListArrayDocAmountTemps,
hgs
parents:
diff changeset
    83
    KMceListArrayDocNoMessages,
hgs
parents:
diff changeset
    84
    KMceListArrayNumberOneMessage,
hgs
parents:
diff changeset
    85
    KMceListArrayNumberOfMsgs, 
hgs
parents:
diff changeset
    86
    KMceListArrayTimeFormatBuffer,
hgs
parents:
diff changeset
    87
    KMceListArrayDateFormatBuffer
hgs
parents:
diff changeset
    88
    };
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
//cmail update
hgs
parents:
diff changeset
    91
#define KUidMsgTypeFsMtmVal               0x2001F406
hgs
parents:
diff changeset
    92
#define KConversationUidVal               0x2002A540  //Conversation Application UID
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
//cmail update
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
// C++ default constructor can NOT contain any code that
hgs
parents:
diff changeset
    99
// might leave.
hgs
parents:
diff changeset
   100
//
hgs
parents:
diff changeset
   101
CMceMainViewListItemArray::CMceMainViewListItemArray(
hgs
parents:
diff changeset
   102
    CMsvSessionPtr aSession,
hgs
parents:
diff changeset
   103
    TMsvId /*aFolderId*/,
hgs
parents:
diff changeset
   104
    TMceListType /*aListType*/,
hgs
parents:
diff changeset
   105
    CMceBitmapResolver& aBitmapResolver ) :
hgs
parents:
diff changeset
   106
    CArrayFixFlat<TMceListItem>( KMceListGranuality ),
hgs
parents:
diff changeset
   107
    iSession( aSession ),
hgs
parents:
diff changeset
   108
//    KMsvRootIndexEntryId( aFolderId ),
hgs
parents:
diff changeset
   109
//    iListType( aListType ),
hgs
parents:
diff changeset
   110
    iBitmapResolver( aBitmapResolver )
hgs
parents:
diff changeset
   111
    {
hgs
parents:
diff changeset
   112
    iMailboxArray.Reset();
hgs
parents:
diff changeset
   113
    iDescriptionLength = iBitmapResolver.DescriptionLength();
hgs
parents:
diff changeset
   114
    }
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
// ----------------------------------------------------
hgs
parents:
diff changeset
   117
// CMceMainViewListItemArray::ConstructL
hgs
parents:
diff changeset
   118
// Symbian OS default constructor can leave.
hgs
parents:
diff changeset
   119
// ----------------------------------------------------
hgs
parents:
diff changeset
   120
void CMceMainViewListItemArray::ConstructL()
hgs
parents:
diff changeset
   121
    {
hgs
parents:
diff changeset
   122
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   123
    if ( FeatureManager::FeatureSupported( KFeatureIdSelectableEmail ) )
hgs
parents:
diff changeset
   124
        {
hgs
parents:
diff changeset
   125
        iSelectableEmail = ETrue;
hgs
parents:
diff changeset
   126
        }
hgs
parents:
diff changeset
   127
    if ( FeatureManager::FeatureSupported( KFeatureIdFfEmailFramework ) )
hgs
parents:
diff changeset
   128
        {
hgs
parents:
diff changeset
   129
        iEmailFramework = ETrue;
hgs
parents:
diff changeset
   130
        }
hgs
parents:
diff changeset
   131
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   132
    iCoeEnv = CEikonEnv::Static();
hgs
parents:
diff changeset
   133
    iUiRegistry = CMtmUiDataRegistry::NewL(*iSession); 
hgs
parents:
diff changeset
   134
    ReadMainViewItemsFromRepositoryL();
hgs
parents:
diff changeset
   135
    ReadExtraItemsResourceL();
hgs
parents:
diff changeset
   136
    
hgs
parents:
diff changeset
   137
    // read phone number grouping feature flag
hgs
parents:
diff changeset
   138
    // sort by details sorts remote mailboxes alphabetical order
hgs
parents:
diff changeset
   139
    iFolderEntry = CMsvEntry::NewL(
hgs
parents:
diff changeset
   140
        *iSession,
hgs
parents:
diff changeset
   141
        KMsvRootIndexEntryId,
hgs
parents:
diff changeset
   142
        TMsvSelectionOrdering(
hgs
parents:
diff changeset
   143
            KMsvGroupByStandardFolders, EMsvSortByDetails ));
hgs
parents:
diff changeset
   144
    
hgs
parents:
diff changeset
   145
    iEmailApi = CreateEmailApiL( &*iSession );
hgs
parents:
diff changeset
   146
    Reset();
hgs
parents:
diff changeset
   147
    AddFoldersL();
hgs
parents:
diff changeset
   148
    iIdleLoader = CMceUtilsIdleClass::NewL( *this );
hgs
parents:
diff changeset
   149
    iIdleLoader->StartL();
hgs
parents:
diff changeset
   150
    iNumberOfMessagesStrings = new(ELeave)CDesCArrayFlat( KMceListGranuality );
hgs
parents:
diff changeset
   151
    TBuf<KMcePrintableTextLength> tempString;
hgs
parents:
diff changeset
   152
    StringLoader::Load( tempString, R_MCE_DOC_AMOUNT, iCoeEnv );
hgs
parents:
diff changeset
   153
    iNumberOfMessagesStrings->AppendL( tempString );
hgs
parents:
diff changeset
   154
    StringLoader::Load( tempString, R_MCE_DOC_AMOUNT_MANY, iCoeEnv );
hgs
parents:
diff changeset
   155
    iNumberOfMessagesStrings->AppendL( tempString );
hgs
parents:
diff changeset
   156
    StringLoader::Load( tempString, R_MCE_DOC_AMOUNT_TEMP, iCoeEnv );
hgs
parents:
diff changeset
   157
    iNumberOfMessagesStrings->AppendL( tempString );
hgs
parents:
diff changeset
   158
    StringLoader::Load( tempString, R_MCE_DOC_AMOUNT_TEMPS, iCoeEnv );
hgs
parents:
diff changeset
   159
    iNumberOfMessagesStrings->AppendL( tempString );
hgs
parents:
diff changeset
   160
    StringLoader::Load( tempString, R_MCE_DOC_NO_MESSAGES, iCoeEnv);
hgs
parents:
diff changeset
   161
    iNumberOfMessagesStrings->AppendL( tempString );
hgs
parents:
diff changeset
   162
    StringLoader::Load( tempString, R_MCE_NUMBER_ONE_MESSAGE, iCoeEnv);
hgs
parents:
diff changeset
   163
    iNumberOfMessagesStrings->AppendL( tempString );
hgs
parents:
diff changeset
   164
    StringLoader::Load( tempString, R_MCE_NUMBER_OF_MSGS, iCoeEnv);
hgs
parents:
diff changeset
   165
    iNumberOfMessagesStrings->AppendL( tempString );
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
    HBufC* timeFormat = iCoeEnv->
hgs
parents:
diff changeset
   168
        AllocReadResourceLC( R_QTN_TIME_USUAL_WITH_ZERO );
hgs
parents:
diff changeset
   169
    iNumberOfMessagesStrings->AppendL( *timeFormat );
hgs
parents:
diff changeset
   170
    CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
   171
    
hgs
parents:
diff changeset
   172
    HBufC* dateFormat = iCoeEnv->
hgs
parents:
diff changeset
   173
            AllocReadResourceLC( R_QTN_DATE_WITHOUT_YEAR_WITH_ZERO );
hgs
parents:
diff changeset
   174
    iNumberOfMessagesStrings->AppendL( *dateFormat );
hgs
parents:
diff changeset
   175
    CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
   176
    
hgs
parents:
diff changeset
   177
    
hgs
parents:
diff changeset
   178
    // todo
hgs
parents:
diff changeset
   179
    iListBoxText = HBufC::NewL( iDescriptionLength*3 ); 
hgs
parents:
diff changeset
   180
    iDefaultViewSettings  = KMceConversationview;
hgs
parents:
diff changeset
   181
    }
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
// Two-phased constructor.
hgs
parents:
diff changeset
   184
CMceMainViewListItemArray* CMceMainViewListItemArray::NewL(
hgs
parents:
diff changeset
   185
    CMsvSessionPtr aSession,
hgs
parents:
diff changeset
   186
    TMsvId aFolderId,
hgs
parents:
diff changeset
   187
    TMceListType aListType,
hgs
parents:
diff changeset
   188
    CMceBitmapResolver& aBitmapResolver )
hgs
parents:
diff changeset
   189
    {
hgs
parents:
diff changeset
   190
    CMceMainViewListItemArray* self = new (ELeave) CMceMainViewListItemArray(
hgs
parents:
diff changeset
   191
        aSession, aFolderId, aListType, aBitmapResolver );
hgs
parents:
diff changeset
   192
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
   193
    self->ConstructL();
hgs
parents:
diff changeset
   194
    CleanupStack::Pop(); // self
hgs
parents:
diff changeset
   195
    return self;
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
// Destructor
hgs
parents:
diff changeset
   200
CMceMainViewListItemArray::~CMceMainViewListItemArray( )
hgs
parents:
diff changeset
   201
    {
hgs
parents:
diff changeset
   202
    delete iExtraItemsArray;
hgs
parents:
diff changeset
   203
    delete iMainViewItems;
hgs
parents:
diff changeset
   204
    delete iFolderEntry;
hgs
parents:
diff changeset
   205
    delete iListBoxText;
hgs
parents:
diff changeset
   206
    delete iNumberOfMessagesStrings;
hgs
parents:
diff changeset
   207
//    delete iUiRegistry;
hgs
parents:
diff changeset
   208
    delete iEmailApi;
hgs
parents:
diff changeset
   209
    iMailboxArray.Reset();
hgs
parents:
diff changeset
   210
    delete iIdleLoader;
hgs
parents:
diff changeset
   211
    delete iUiRegistry;
hgs
parents:
diff changeset
   212
    // iSession deleted elsewhere
hgs
parents:
diff changeset
   213
    }
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   216
// CMceMainViewListItemArray::MakeItemL()
hgs
parents:
diff changeset
   217
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   218
//
hgs
parents:
diff changeset
   219
void CMceMainViewListItemArray::MakeItemL( 
hgs
parents:
diff changeset
   220
    TMceListItem& aListItem,
hgs
parents:
diff changeset
   221
    const TMsvEntry& aEntry ) const
hgs
parents:
diff changeset
   222
    {
hgs
parents:
diff changeset
   223
    aListItem.iPrintableText.Zero();
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
    const TMsvId id=aEntry.Id();
hgs
parents:
diff changeset
   226
    StripAndAppendString( 
hgs
parents:
diff changeset
   227
        aListItem.iPrintableText,
hgs
parents:
diff changeset
   228
        aEntry.iDetails );
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
    aListItem.iMsvId = id;
hgs
parents:
diff changeset
   231
    aListItem.iExtraItem = EFalse;
hgs
parents:
diff changeset
   232
    aListItem.iIconIndex = KErrNotFound;  
hgs
parents:
diff changeset
   233
    aListItem.iText.Zero();
hgs
parents:
diff changeset
   234
    }
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   237
// CMceMainViewListItemArray::InsertItemL()
hgs
parents:
diff changeset
   238
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   239
//
hgs
parents:
diff changeset
   240
void CMceMainViewListItemArray::InsertItemL( 
hgs
parents:
diff changeset
   241
    const TMsvEntry& aEntry, 
hgs
parents:
diff changeset
   242
    const TInt aIndex )
hgs
parents:
diff changeset
   243
    {
hgs
parents:
diff changeset
   244
    TMceListItem tempItem;
hgs
parents:
diff changeset
   245
    MakeItemL( tempItem, aEntry );
hgs
parents:
diff changeset
   246
    InsertL( aIndex, tempItem );
hgs
parents:
diff changeset
   247
    }
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
// ----------------------------------------------------
hgs
parents:
diff changeset
   251
// CMceMainViewListItemArray::AddItemL
hgs
parents:
diff changeset
   252
// ----------------------------------------------------
hgs
parents:
diff changeset
   253
void CMceMainViewListItemArray::AddItemL( const TMsvEntry& aEntry )
hgs
parents:
diff changeset
   254
    {
hgs
parents:
diff changeset
   255
    TMceListItem tempItem;
hgs
parents:
diff changeset
   256
    MakeItemL( tempItem, aEntry );
hgs
parents:
diff changeset
   257
    AppendL( tempItem );
hgs
parents:
diff changeset
   258
    }
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   262
// CMceListItemArray::AddFolderItemL()
hgs
parents:
diff changeset
   263
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   264
//
hgs
parents:
diff changeset
   265
void CMceMainViewListItemArray::AddFolderItemL( TMsvId aEntryId )
hgs
parents:
diff changeset
   266
    {
hgs
parents:
diff changeset
   267
    TMsvId service = KMsvLocalServiceIndexEntryId;
hgs
parents:
diff changeset
   268
    TMsvEntry entry;
hgs
parents:
diff changeset
   269
    if ( iSession->GetEntry(aEntryId,service,entry) == KErrNone )
hgs
parents:
diff changeset
   270
    	{
hgs
parents:
diff changeset
   271
    	AddItemL( entry );
hgs
parents:
diff changeset
   272
    	}
hgs
parents:
diff changeset
   273
    }
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
// ----------------------------------------------------
hgs
parents:
diff changeset
   276
// CMceMainViewListItemArray::ItemIndex
hgs
parents:
diff changeset
   277
// ----------------------------------------------------
hgs
parents:
diff changeset
   278
TInt CMceMainViewListItemArray::ItemIndex(TMsvId aItemId) const
hgs
parents:
diff changeset
   279
    {
hgs
parents:
diff changeset
   280
    TInt foundItem = KErrNotFound;
hgs
parents:
diff changeset
   281
    const TInt count = Count();
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
    for( TInt loop = 0; loop < count && foundItem == KErrNotFound ; loop++)
hgs
parents:
diff changeset
   284
        {
hgs
parents:
diff changeset
   285
        if ( !At(loop).iExtraItem && At(loop).iMsvId == aItemId )
hgs
parents:
diff changeset
   286
            {
hgs
parents:
diff changeset
   287
            foundItem = loop;
hgs
parents:
diff changeset
   288
            }
hgs
parents:
diff changeset
   289
        }
hgs
parents:
diff changeset
   290
    return foundItem;
hgs
parents:
diff changeset
   291
    }
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
// ----------------------------------------------------
hgs
parents:
diff changeset
   294
// CMceMainViewListItemArray::ExtraItemIndex
hgs
parents:
diff changeset
   295
// ----------------------------------------------------
hgs
parents:
diff changeset
   296
TInt CMceMainViewListItemArray::ExtraItemIndex( TInt aItemId ) const
hgs
parents:
diff changeset
   297
    {
hgs
parents:
diff changeset
   298
    TInt foundItem = KErrNotFound;
hgs
parents:
diff changeset
   299
    const TInt count = Count();
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
    for( TInt loop = 0; loop < count && foundItem == KErrNotFound ; loop++)
hgs
parents:
diff changeset
   302
        {
hgs
parents:
diff changeset
   303
        if ( At(loop).iExtraItem && At(loop).iMsvId == aItemId )
hgs
parents:
diff changeset
   304
            {
hgs
parents:
diff changeset
   305
            foundItem = loop;
hgs
parents:
diff changeset
   306
            }
hgs
parents:
diff changeset
   307
        }
hgs
parents:
diff changeset
   308
    return foundItem;
hgs
parents:
diff changeset
   309
    }
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
// ----------------------------------------------------
hgs
parents:
diff changeset
   312
// CMceListItemArray::ItemId
hgs
parents:
diff changeset
   313
// ----------------------------------------------------
hgs
parents:
diff changeset
   314
TMsvId CMceMainViewListItemArray::ItemId( TInt aIndex ) const
hgs
parents:
diff changeset
   315
    {
hgs
parents:
diff changeset
   316
    TMsvId id = KErrNotFound;
hgs
parents:
diff changeset
   317
    if ( aIndex >= 0 && aIndex < Count() )
hgs
parents:
diff changeset
   318
        {
hgs
parents:
diff changeset
   319
        if ( !At(aIndex).iExtraItem )
hgs
parents:
diff changeset
   320
            {
hgs
parents:
diff changeset
   321
            id = At(aIndex).iMsvId;
hgs
parents:
diff changeset
   322
            }
hgs
parents:
diff changeset
   323
        }
hgs
parents:
diff changeset
   324
    return id;
hgs
parents:
diff changeset
   325
    }
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
// ----------------------------------------------------
hgs
parents:
diff changeset
   328
// CMceMainViewListItemArray::Item
hgs
parents:
diff changeset
   329
// ----------------------------------------------------
hgs
parents:
diff changeset
   330
const TMceListItem CMceMainViewListItemArray::Item( TInt aIndex ) const
hgs
parents:
diff changeset
   331
    {
hgs
parents:
diff changeset
   332
    TMceListItem tempItem;
hgs
parents:
diff changeset
   333
    tempItem.iMsvId = At(aIndex).iMsvId;
hgs
parents:
diff changeset
   334
    tempItem.iExtraItem = At(aIndex).iExtraItem;
hgs
parents:
diff changeset
   335
    return tempItem;
hgs
parents:
diff changeset
   336
    }
hgs
parents:
diff changeset
   337
hgs
parents:
diff changeset
   338
// ----------------------------------------------------
hgs
parents:
diff changeset
   339
// CMceMainViewListItemArray::AddExtraItemL
hgs
parents:
diff changeset
   340
// ----------------------------------------------------
hgs
parents:
diff changeset
   341
void CMceMainViewListItemArray::AddExtraItemL( TMceListItem& aNewItem, TInt aIndex )
hgs
parents:
diff changeset
   342
    {
hgs
parents:
diff changeset
   343
    TMcePrintableText tempText = aNewItem.iPrintableText; // let's save string
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
    aNewItem.iExtraItem = ETrue;
hgs
parents:
diff changeset
   346
    // make sure it will not be mixed with items in msgs
hgs
parents:
diff changeset
   347
    TMceBitmapListItem bitmapItem;
hgs
parents:
diff changeset
   348
    bitmapItem.iExtraItem = ETrue;
hgs
parents:
diff changeset
   349
    bitmapItem.iMtm.iUid = KUidMsvLocalServiceMtmValue;
hgs
parents:
diff changeset
   350
    bitmapItem.iType.iUid = KUidMsvFolderEntryValue;
hgs
parents:
diff changeset
   351
    bitmapItem.iId = aNewItem.iMsvId;
hgs
parents:
diff changeset
   352
    const TInt index = iBitmapResolver.BitmapIndex( bitmapItem );
hgs
parents:
diff changeset
   353
    aNewItem.iPrintableText.Zero();
hgs
parents:
diff changeset
   354
    aNewItem.iPrintableText.AppendNum( index );
hgs
parents:
diff changeset
   355
    aNewItem.iPrintableText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   356
    aNewItem.iPrintableText.Append( tempText );
hgs
parents:
diff changeset
   357
    aNewItem.iText.Zero();
hgs
parents:
diff changeset
   358
    InsertL( aIndex, aNewItem );
hgs
parents:
diff changeset
   359
    }
hgs
parents:
diff changeset
   360
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
// ----------------------------------------------------
hgs
parents:
diff changeset
   363
// CMceMainViewListItemArray::AddExtraItemWithIconL
hgs
parents:
diff changeset
   364
// ----------------------------------------------------
hgs
parents:
diff changeset
   365
void CMceMainViewListItemArray::AddExtraItemWithIconL( 
hgs
parents:
diff changeset
   366
    TMceListItem& aNewItem, 
hgs
parents:
diff changeset
   367
    TInt aIndex, 
hgs
parents:
diff changeset
   368
    TInt aIconIndex,
hgs
parents:
diff changeset
   369
    TUid aApplicationUid )
hgs
parents:
diff changeset
   370
    {
hgs
parents:
diff changeset
   371
    TMcePrintableText tempText = aNewItem.iPrintableText; // let's save string
hgs
parents:
diff changeset
   372
    TMcePrintableText secondarytxt = aNewItem.iSecondaryText;
hgs
parents:
diff changeset
   373
    aNewItem.iExtraItem = ETrue;
hgs
parents:
diff changeset
   374
    // make sure it will not be mixed with items in msgs
hgs
parents:
diff changeset
   375
    TMceBitmapListItem bitmapItem;
hgs
parents:
diff changeset
   376
    bitmapItem.iExtraItem = ETrue;
hgs
parents:
diff changeset
   377
    bitmapItem.iMtm = aApplicationUid ; //KUidMsvLocalServiceMtmValue;
hgs
parents:
diff changeset
   378
    bitmapItem.iType = aApplicationUid; //KUidMsvFolderEntryValue;
hgs
parents:
diff changeset
   379
    bitmapItem.iId = aNewItem.iMsvId;
hgs
parents:
diff changeset
   380
    // here to add loading of the icon...
hgs
parents:
diff changeset
   381
    _LIT( KMceExtraIconsDirAndFile,"MceExtraIcons.mbm" );
hgs
parents:
diff changeset
   382
    TParse fp;
hgs
parents:
diff changeset
   383
    fp.Set( KMceExtraIconsDirAndFile, &KDC_APP_BITMAP_DIR , NULL );
hgs
parents:
diff changeset
   384
    // trap this and if fails, set index = Unknown.
hgs
parents:
diff changeset
   385
    TInt error = KErrNone;
hgs
parents:
diff changeset
   386
    
hgs
parents:
diff changeset
   387
    // Add the bitmap
hgs
parents:
diff changeset
   388
    TRAP( error, iBitmapResolver.CreateAndAppendIconL( \
hgs
parents:
diff changeset
   389
        KAknsIIDDefault,\
hgs
parents:
diff changeset
   390
        fp.FullName(),\
hgs
parents:
diff changeset
   391
        aIconIndex,\
hgs
parents:
diff changeset
   392
        &bitmapItem ) );
hgs
parents:
diff changeset
   393
    
hgs
parents:
diff changeset
   394
    // Handle the error
hgs
parents:
diff changeset
   395
    TInt index;
hgs
parents:
diff changeset
   396
    if ( error == KErrNone )
hgs
parents:
diff changeset
   397
    	{
hgs
parents:
diff changeset
   398
    	index = iBitmapResolver.BitmapIndex( bitmapItem );
hgs
parents:
diff changeset
   399
    	}
hgs
parents:
diff changeset
   400
    else
hgs
parents:
diff changeset
   401
    	{
hgs
parents:
diff changeset
   402
    	index = EMceBitmapIndexUnknown;
hgs
parents:
diff changeset
   403
    	}
hgs
parents:
diff changeset
   404
    
hgs
parents:
diff changeset
   405
    aNewItem.iPrintableText.Zero();
hgs
parents:
diff changeset
   406
    aNewItem.iPrintableText.AppendNum( index );
hgs
parents:
diff changeset
   407
    aNewItem.iPrintableText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   408
    aNewItem.iPrintableText.Append( tempText );
hgs
parents:
diff changeset
   409
    aNewItem.iPrintableText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   410
    aNewItem.iPrintableText.Append( secondarytxt );
hgs
parents:
diff changeset
   411
    aNewItem.iText.Zero();
hgs
parents:
diff changeset
   412
    InsertL( aIndex, aNewItem );
hgs
parents:
diff changeset
   413
    }
hgs
parents:
diff changeset
   414
hgs
parents:
diff changeset
   415
// ----------------------------------------------------
hgs
parents:
diff changeset
   416
// CMceMainViewListItemArray::MdcaCount
hgs
parents:
diff changeset
   417
// ----------------------------------------------------
hgs
parents:
diff changeset
   418
TInt CMceMainViewListItemArray::MdcaCount() const
hgs
parents:
diff changeset
   419
    {
hgs
parents:
diff changeset
   420
    return Count();
hgs
parents:
diff changeset
   421
    }
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
// ----------------------------------------------------
hgs
parents:
diff changeset
   424
// CMceMainViewListItemArray::MdcaPoint
hgs
parents:
diff changeset
   425
// ----------------------------------------------------
hgs
parents:
diff changeset
   426
TPtrC CMceMainViewListItemArray::MdcaPoint( TInt aIndex ) const
hgs
parents:
diff changeset
   427
    {
hgs
parents:
diff changeset
   428
    const TMceListItem& item = At( aIndex );
hgs
parents:
diff changeset
   429
    if ( item.iExtraItem )
hgs
parents:
diff changeset
   430
        {
hgs
parents:
diff changeset
   431
        if ( item.iMsvId == KMceDeliveryReportsId )
hgs
parents:
diff changeset
   432
            {
hgs
parents:
diff changeset
   433
            TPtr tempText = iListBoxText->Des();
hgs
parents:
diff changeset
   434
            tempText.Copy( item.iPrintableText );
hgs
parents:
diff changeset
   435
            return tempText;
hgs
parents:
diff changeset
   436
            }
hgs
parents:
diff changeset
   437
     else if(  item.iApplicationUid == KConversationUidVal )
hgs
parents:
diff changeset
   438
            {          
hgs
parents:
diff changeset
   439
            return CreateConversationsListItem( aIndex );
hgs
parents:
diff changeset
   440
            }
hgs
parents:
diff changeset
   441
        else
hgs
parents:
diff changeset
   442
            {
hgs
parents:
diff changeset
   443
            return item.iPrintableText;
hgs
parents:
diff changeset
   444
            }
hgs
parents:
diff changeset
   445
        }
hgs
parents:
diff changeset
   446
    else
hgs
parents:
diff changeset
   447
        {
hgs
parents:
diff changeset
   448
        return MakeStringForMainView( aIndex );
hgs
parents:
diff changeset
   449
        }
hgs
parents:
diff changeset
   450
    }
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
// ----------------------------------------------------
hgs
parents:
diff changeset
   453
// CMceMainViewListItemArray::MakeStringForMainView
hgs
parents:
diff changeset
   454
// ----------------------------------------------------
hgs
parents:
diff changeset
   455
TPtrC CMceMainViewListItemArray::MakeStringForMainView( TInt aIndex ) const
hgs
parents:
diff changeset
   456
    {
hgs
parents:
diff changeset
   457
    TPtr tempText = iListBoxText->Des();
hgs
parents:
diff changeset
   458
    tempText.Zero();
hgs
parents:
diff changeset
   459
    TMsvEntry entry;
hgs
parents:
diff changeset
   460
    TMsvId serviceId;
hgs
parents:
diff changeset
   461
    
hgs
parents:
diff changeset
   462
    const TMceListItem& item = At( aIndex );
hgs
parents:
diff changeset
   463
    if ( iSession->GetEntry( item.iMsvId, serviceId, entry ) == KErrNone )
hgs
parents:
diff changeset
   464
        {
hgs
parents:
diff changeset
   465
        if ( item.iIconIndex <= KErrNone || item.iIconIndex >= iBitmapResolver.MtmIconIndex() )
hgs
parents:
diff changeset
   466
            {
hgs
parents:
diff changeset
   467
            TInt messageCount = 0;
hgs
parents:
diff changeset
   468
            TMsvId id = entry.Id();
hgs
parents:
diff changeset
   469
            CONST_CAST( TMceListItem*, &item)->iIconIndex = iBitmapResolver.BitmapIndex( entry, messageCount );
hgs
parents:
diff changeset
   470
            if(iDefaultViewSettings == KMceConversationview && id == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
   471
                {
hgs
parents:
diff changeset
   472
                CONST_CAST( TMceListItem*, &item)->iIconIndex = EMceBitmapIndexInbox;
hgs
parents:
diff changeset
   473
                }            
hgs
parents:
diff changeset
   474
            CONST_CAST( TMceListItem*, &item)->iMessageCount = messageCount;
hgs
parents:
diff changeset
   475
            }
hgs
parents:
diff changeset
   476
        else if(iListItemArrayObserver )
hgs
parents:
diff changeset
   477
            {
hgs
parents:
diff changeset
   478
	    	//if item iText is not cached then cache it first
hgs
parents:
diff changeset
   479
             if((item.iText.Length()!=0)&&(iListItemArrayObserver->MceListItemArrayFlickEvent()))
hgs
parents:
diff changeset
   480
                 {
hgs
parents:
diff changeset
   481
                 return item.iText;
hgs
parents:
diff changeset
   482
                 }
hgs
parents:
diff changeset
   483
            }
hgs
parents:
diff changeset
   484
        
hgs
parents:
diff changeset
   485
        tempText.AppendNum( item.iIconIndex );
hgs
parents:
diff changeset
   486
        tempText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   487
        tempText.Append( item.iPrintableText );
hgs
parents:
diff changeset
   488
        AppendMessageCountString( tempText, item.iMessageCount );
hgs
parents:
diff changeset
   489
               
hgs
parents:
diff changeset
   490
        if ( entry.Connected() )
hgs
parents:
diff changeset
   491
            {
hgs
parents:
diff changeset
   492
            if ( iRoaming )
hgs
parents:
diff changeset
   493
                {
hgs
parents:
diff changeset
   494
                tempText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   495
                tempText.AppendNum( (TInt) EMceBitmapIndexAlwaysRoaming );
hgs
parents:
diff changeset
   496
                }
hgs
parents:
diff changeset
   497
            else
hgs
parents:
diff changeset
   498
                {
hgs
parents:
diff changeset
   499
                tempText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   500
                tempText.AppendNum( (TInt) EMceBitmapIndexMailboxConnectionOn );
hgs
parents:
diff changeset
   501
                }
hgs
parents:
diff changeset
   502
            }
hgs
parents:
diff changeset
   503
        else if (  iAlwaysOnline && ( entry.iMtm == KSenduiMtmImap4Uid || 
hgs
parents:
diff changeset
   504
            entry.iMtm == KSenduiMtmPop3Uid ) )
hgs
parents:
diff changeset
   505
            {
hgs
parents:
diff changeset
   506
            TBool dateTime = EFalse;
hgs
parents:
diff changeset
   507
            TBool aoAccount = EFalse;
hgs
parents:
diff changeset
   508
            TRAP_IGNORE( dateTime = AlwaysOnlineDateTimeValidL( serviceId, aoAccount ) );
hgs
parents:
diff changeset
   509
            if ( dateTime )
hgs
parents:
diff changeset
   510
                {
hgs
parents:
diff changeset
   511
                // within the update interval
hgs
parents:
diff changeset
   512
                tempText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   513
                if ( iRoaming )
hgs
parents:
diff changeset
   514
                    {
hgs
parents:
diff changeset
   515
                    tempText.AppendNum( (TInt) EMceBitmapIndexAlwaysRoaming );
hgs
parents:
diff changeset
   516
                    }
hgs
parents:
diff changeset
   517
                else
hgs
parents:
diff changeset
   518
                    { 
hgs
parents:
diff changeset
   519
                    tempText.AppendNum( (TInt) EMceBitmapIndexAlwaysAdd );
hgs
parents:
diff changeset
   520
                    }
hgs
parents:
diff changeset
   521
                }
hgs
parents:
diff changeset
   522
            else if ( aoAccount )
hgs
parents:
diff changeset
   523
                {
hgs
parents:
diff changeset
   524
                // outside the interval
hgs
parents:
diff changeset
   525
                tempText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   526
                if ( iRoaming )
hgs
parents:
diff changeset
   527
                    {
hgs
parents:
diff changeset
   528
                    tempText.AppendNum( (TInt) EMceBitmapIndexAlwaysRoaming );
hgs
parents:
diff changeset
   529
                    }
hgs
parents:
diff changeset
   530
                else
hgs
parents:
diff changeset
   531
                    {
hgs
parents:
diff changeset
   532
                    tempText.AppendNum( (TInt) EMceBitmapIndexInactiveAdd );
hgs
parents:
diff changeset
   533
                    }
hgs
parents:
diff changeset
   534
                }
hgs
parents:
diff changeset
   535
            }
hgs
parents:
diff changeset
   536
        }
hgs
parents:
diff changeset
   537
    else
hgs
parents:
diff changeset
   538
        {
hgs
parents:
diff changeset
   539
        // this should never happend
hgs
parents:
diff changeset
   540
        __ASSERT_DEBUG( 0, Panic(EMceListItemArrayEntryNotFound ) );
hgs
parents:
diff changeset
   541
        tempText.AppendNum( (TInt)EMceBitmapIndexUnknown );
hgs
parents:
diff changeset
   542
        tempText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   543
        tempText.Append( item.iPrintableText );        
hgs
parents:
diff changeset
   544
        }
hgs
parents:
diff changeset
   545
    //save the complete string as chache, will be used when flick will start
hgs
parents:
diff changeset
   546
    CONST_CAST( TMceListItem*, &item)->iText.Zero();
hgs
parents:
diff changeset
   547
    CONST_CAST( TMceListItem*, &item)->iText.Copy(tempText);
hgs
parents:
diff changeset
   548
    return tempText;
hgs
parents:
diff changeset
   549
    }
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   552
// CMceMainViewListItemArray::ShouldAddToListL()
hgs
parents:
diff changeset
   553
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   554
//
hgs
parents:
diff changeset
   555
TBool CMceMainViewListItemArray::ShouldAddToListL( 
hgs
parents:
diff changeset
   556
    const TMsvEntry& aEntry,
hgs
parents:
diff changeset
   557
    const TMsvId aId )
hgs
parents:
diff changeset
   558
    {
hgs
parents:
diff changeset
   559
    TBool add =
hgs
parents:
diff changeset
   560
        // Is it a folder
hgs
parents:
diff changeset
   561
        ( aEntry.iType == KUidMsvFolderEntry ) ||
hgs
parents:
diff changeset
   562
        // Is it a local service id
hgs
parents:
diff changeset
   563
        ( aId == KMsvLocalServiceIndexEntryId ) ||
hgs
parents:
diff changeset
   564
        // Is it service but not local one?
hgs
parents:
diff changeset
   565
        ( ( aEntry.iType == KUidMsvServiceEntry && 
hgs
parents:
diff changeset
   566
            aEntry.Id() != KMsvLocalServiceIndexEntryId ) );
hgs
parents:
diff changeset
   567
hgs
parents:
diff changeset
   568
    // Mailboxes are added later, so ignore them here            
hgs
parents:
diff changeset
   569
    return add ? !iEmailApi->MailboxUtilitiesL().IsMailMtm( aEntry.iMtm, ETrue ) : EFalse;        
hgs
parents:
diff changeset
   570
    }
hgs
parents:
diff changeset
   571
hgs
parents:
diff changeset
   572
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   573
// CMceMainViewListItemArray::CollectServicesL()
hgs
parents:
diff changeset
   574
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   575
//
hgs
parents:
diff changeset
   576
TInt CMceMainViewListItemArray::CollectServicesL( const TMsvId aId )
hgs
parents:
diff changeset
   577
    {    
hgs
parents:
diff changeset
   578
    const TMsvEntry* tEntry;
hgs
parents:
diff changeset
   579
    const TInt count = iFolderEntry->Count();
hgs
parents:
diff changeset
   580
    for (TInt cc = 0; cc < count; cc++)
hgs
parents:
diff changeset
   581
        {
hgs
parents:
diff changeset
   582
        tEntry = &( *iFolderEntry )[cc];
hgs
parents:
diff changeset
   583
        if ( ShouldAddToListL( *tEntry, aId ) )
hgs
parents:
diff changeset
   584
            {
hgs
parents:
diff changeset
   585
            AddItemL( *tEntry );            
hgs
parents:
diff changeset
   586
            }
hgs
parents:
diff changeset
   587
        }
hgs
parents:
diff changeset
   588
        
hgs
parents:
diff changeset
   589
    return Count();
hgs
parents:
diff changeset
   590
    }
hgs
parents:
diff changeset
   591
hgs
parents:
diff changeset
   592
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   593
// CMceMainViewListItemArray::AddMailboxesL()
hgs
parents:
diff changeset
   594
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   595
void CMceMainViewListItemArray::AddMailboxesL( const TInt /*aMailboxIndex*/ )
hgs
parents:
diff changeset
   596
    {
hgs
parents:
diff changeset
   597
    // add mailboxes only if smtp mtm is installed
hgs
parents:
diff changeset
   598
    if ( iUiRegistry->IsPresent( KSenduiMtmSmtpUid ) )
hgs
parents:
diff changeset
   599
        {
hgs
parents:
diff changeset
   600
        // Get the list of valid IMAP4, POP3, and SyncML mailboxes
hgs
parents:
diff changeset
   601
        TInt err  = MceUtils::GetHealthyMailboxListL( 
hgs
parents:
diff changeset
   602
            iEmailApi->HealthServicesL(),
hgs
parents:
diff changeset
   603
            iMailboxArray,
hgs
parents:
diff changeset
   604
            ETrue,
hgs
parents:
diff changeset
   605
            ETrue,
hgs
parents:
diff changeset
   606
            ETrue,
hgs
parents:
diff changeset
   607
            ETrue );
hgs
parents:
diff changeset
   608
hgs
parents:
diff changeset
   609
    // for use of CMceMainViewListView::AddExtraItemsL() so that 
hgs
parents:
diff changeset
   610
    // MceUtils::GetHealthyMailboxListL won't be called twice
hgs
parents:
diff changeset
   611
        iErrGetHealthyMailBoxList = err;
hgs
parents:
diff changeset
   612
        iMaiboxArrayCount = iMailboxArray.Count(); 
hgs
parents:
diff changeset
   613
//        MCELOGGER_WRITE_FORMAT("AddMailboxesL: iMaiboxArrayCount: %d", iMaiboxArrayCount );
hgs
parents:
diff changeset
   614
        
hgs
parents:
diff changeset
   615
        if ( iMaiboxArrayCount )
hgs
parents:
diff changeset
   616
            {
hgs
parents:
diff changeset
   617
            // Add the items to main view array in alphabetical order        
hgs
parents:
diff changeset
   618
            for ( TInt mbox = 0; mbox < iMaiboxArrayCount; mbox++)
hgs
parents:
diff changeset
   619
                {   
hgs
parents:
diff changeset
   620
                // cmail update
hgs
parents:
diff changeset
   621
                if(iEmailFramework)
hgs
parents:
diff changeset
   622
                    {                   
hgs
parents:
diff changeset
   623
                    //IF mtm UID matches with uidMsgTypeFsMtmVal, skip the entry
hgs
parents:
diff changeset
   624
                    //cmail should not be visible in MCE main view
hgs
parents:
diff changeset
   625
                    TMsvId service;
hgs
parents:
diff changeset
   626
                    TMsvEntry entry;
hgs
parents:
diff changeset
   627
                    User::LeaveIfError( iSession->GetEntry( iMailboxArray[mbox], service, entry ) );
hgs
parents:
diff changeset
   628
                    if(entry.iMtm.iUid == KUidMsgTypeFsMtmVal)
hgs
parents:
diff changeset
   629
                        {
hgs
parents:
diff changeset
   630
                        continue;
hgs
parents:
diff changeset
   631
                        }
hgs
parents:
diff changeset
   632
                    }
hgs
parents:
diff changeset
   633
                //cmail update
hgs
parents:
diff changeset
   634
                AddItemL( iFolderEntry->ChildDataL( iMailboxArray[mbox] ) );
hgs
parents:
diff changeset
   635
                }            
hgs
parents:
diff changeset
   636
            }
hgs
parents:
diff changeset
   637
        else
hgs
parents:
diff changeset
   638
            {
hgs
parents:
diff changeset
   639
            //Cmail update
hgs
parents:
diff changeset
   640
            // If iEmailFramework is true , donot show "MailBox"
hgs
parents:
diff changeset
   641
            // even if selectable email is true.
hgs
parents:
diff changeset
   642
            if(!iEmailFramework)
hgs
parents:
diff changeset
   643
                {
hgs
parents:
diff changeset
   644
                if ( !iSelectableEmail  || ( iSelectableEmail && 
hgs
parents:
diff changeset
   645
                        !MsvUiServiceUtilitiesInternal::OtherEmailMTMExistL( *iSession ) ) )
hgs
parents:
diff changeset
   646
                    {
hgs
parents:
diff changeset
   647
                    // add special mailbox entry
hgs
parents:
diff changeset
   648
                    AddExtraItemFromResourceL( R_MCE_MAIN_VIEW_NO_MAILBOXES, KMceNoMailboxesListId );
hgs
parents:
diff changeset
   649
                    }
hgs
parents:
diff changeset
   650
                }
hgs
parents:
diff changeset
   651
            }
hgs
parents:
diff changeset
   652
        }
hgs
parents:
diff changeset
   653
        
hgs
parents:
diff changeset
   654
    }
hgs
parents:
diff changeset
   655
hgs
parents:
diff changeset
   656
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   657
// CMceMainViewListItemArray::AddExtraItemFromResourceL()
hgs
parents:
diff changeset
   658
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   659
//
hgs
parents:
diff changeset
   660
void CMceMainViewListItemArray::AddExtraItemFromResourceL( TInt aResourceId, TInt aCommandId )
hgs
parents:
diff changeset
   661
    {
hgs
parents:
diff changeset
   662
    TMceListItem tempItem;
hgs
parents:
diff changeset
   663
    tempItem.iExtraItem = ETrue;
hgs
parents:
diff changeset
   664
    tempItem.iMsvId = aCommandId;
hgs
parents:
diff changeset
   665
    StringLoader::Load( tempItem.iPrintableText, aResourceId, iCoeEnv );
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
    HBufC* line2text = NULL;
hgs
parents:
diff changeset
   668
    switch ( aResourceId )
hgs
parents:
diff changeset
   669
        {
hgs
parents:
diff changeset
   670
        case R_MCE_MAIN_VIEW_DELIVERY_REPORTS:
hgs
parents:
diff changeset
   671
            line2text = StringLoader::LoadL( R_MCE_MAIN_VIEW_DELIVERY_INFORMATION, iEikonEnv );
hgs
parents:
diff changeset
   672
        break;
hgs
parents:
diff changeset
   673
        case R_MCE_MAIN_VIEW_NO_MAILBOXES:
hgs
parents:
diff changeset
   674
            line2text = StringLoader::LoadL( R_MCE_MAIN_VIEW_NO_MAILBOXES_DEFINED, iEikonEnv );
hgs
parents:
diff changeset
   675
        break;
hgs
parents:
diff changeset
   676
        default:
hgs
parents:
diff changeset
   677
            // others does not have line2...
hgs
parents:
diff changeset
   678
        break;
hgs
parents:
diff changeset
   679
        }
hgs
parents:
diff changeset
   680
    
hgs
parents:
diff changeset
   681
    if ( line2text )
hgs
parents:
diff changeset
   682
        {
hgs
parents:
diff changeset
   683
        tempItem.iPrintableText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   684
        tempItem.iPrintableText.Append( *line2text );
hgs
parents:
diff changeset
   685
        delete line2text;
hgs
parents:
diff changeset
   686
        line2text = NULL;
hgs
parents:
diff changeset
   687
        }
hgs
parents:
diff changeset
   688
    
hgs
parents:
diff changeset
   689
    // always add at the end
hgs
parents:
diff changeset
   690
    AddExtraItemL( tempItem, Count() );
hgs
parents:
diff changeset
   691
    }
hgs
parents:
diff changeset
   692
hgs
parents:
diff changeset
   693
// ----------------------------------------------------
hgs
parents:
diff changeset
   694
// CMceMainViewListItemArray::AddFoldersL
hgs
parents:
diff changeset
   695
// Adds the children of TMsvId aId to the listbox
hgs
parents:
diff changeset
   696
// ----------------------------------------------------
hgs
parents:
diff changeset
   697
void CMceMainViewListItemArray::AddFoldersL( )
hgs
parents:
diff changeset
   698
    {
hgs
parents:
diff changeset
   699
    Reset();
hgs
parents:
diff changeset
   700
    TInt count = iMainViewItems->Count();
hgs
parents:
diff changeset
   701
    TInt extraItemCommandCount = 0;
hgs
parents:
diff changeset
   702
    
hgs
parents:
diff changeset
   703
    for ( TInt i=0; i<count; i++ )
hgs
parents:
diff changeset
   704
        {
hgs
parents:
diff changeset
   705
        TMsvId folderId = (*iMainViewItems)[i];
hgs
parents:
diff changeset
   706
        switch ( folderId )
hgs
parents:
diff changeset
   707
            {
hgs
parents:
diff changeset
   708
            case KMceWriteMessageListIdValue:
hgs
parents:
diff changeset
   709
                AddExtraItemFromResourceL( R_MCE_MAIN_VIEW_WRITE_MESSAGE, folderId );
hgs
parents:
diff changeset
   710
            break;
hgs
parents:
diff changeset
   711
            case KMceNoMailboxesListIdValue:
hgs
parents:
diff changeset
   712
                AddMailboxesL( KErrNotFound );
hgs
parents:
diff changeset
   713
                //AddExtraItemFromResourceL();
hgs
parents:
diff changeset
   714
            break;
hgs
parents:
diff changeset
   715
            case KMceDeliveryReportsListIdValue:
hgs
parents:
diff changeset
   716
                AddExtraItemFromResourceL( R_MCE_MAIN_VIEW_DELIVERY_REPORTS, folderId );
hgs
parents:
diff changeset
   717
            break;
hgs
parents:
diff changeset
   718
            default:
hgs
parents:
diff changeset
   719
            if ( folderId > KMsvRootIndexEntryIdValue )
hgs
parents:
diff changeset
   720
                {
hgs
parents:
diff changeset
   721
                AddFolderItemL( folderId );
hgs
parents:
diff changeset
   722
                }
hgs
parents:
diff changeset
   723
             else if ( folderId == KMceExtraItemPlaceHolderValue )
hgs
parents:
diff changeset
   724
                {
hgs
parents:
diff changeset
   725
                AddExtraItemCommandL( extraItemCommandCount );
hgs
parents:
diff changeset
   726
                extraItemCommandCount++;
hgs
parents:
diff changeset
   727
                }
hgs
parents:
diff changeset
   728
            break;
hgs
parents:
diff changeset
   729
            }
hgs
parents:
diff changeset
   730
        }
hgs
parents:
diff changeset
   731
    }
hgs
parents:
diff changeset
   732
    
hgs
parents:
diff changeset
   733
// ----------------------------------------------------
hgs
parents:
diff changeset
   734
// CMceMainViewListItemArray::AddInboxDocumentsL
hgs
parents:
diff changeset
   735
// ----------------------------------------------------
hgs
parents:
diff changeset
   736
void CMceMainViewListItemArray::AddInboxDocumentsL( )
hgs
parents:
diff changeset
   737
    {
hgs
parents:
diff changeset
   738
    iFolderEntry->SetEntryL( KMsvLocalServiceIndexEntryId );
hgs
parents:
diff changeset
   739
    AddItemL( iFolderEntry->
hgs
parents:
diff changeset
   740
        ChildDataL( KMsvGlobalInBoxIndexEntryId ) );
hgs
parents:
diff changeset
   741
    AddItemL( iFolderEntry->ChildDataL( KMceDocumentsEntryId ) );
hgs
parents:
diff changeset
   742
    }
hgs
parents:
diff changeset
   743
hgs
parents:
diff changeset
   744
// ----------------------------------------------------
hgs
parents:
diff changeset
   745
// CMceMainViewListItemArray::AddDraftSentOutboxL
hgs
parents:
diff changeset
   746
// ----------------------------------------------------
hgs
parents:
diff changeset
   747
void CMceMainViewListItemArray::AddDraftSentOutboxL( )
hgs
parents:
diff changeset
   748
    {
hgs
parents:
diff changeset
   749
    iFolderEntry->SetEntryL( KMsvLocalServiceIndexEntryId );
hgs
parents:
diff changeset
   750
    AddItemL( iFolderEntry->ChildDataL( KMsvDraftEntryId ) );
hgs
parents:
diff changeset
   751
    AddItemL( iFolderEntry->ChildDataL( KMsvSentEntryId ) );
hgs
parents:
diff changeset
   752
    AddItemL( iFolderEntry->
hgs
parents:
diff changeset
   753
    ChildDataL( KMsvGlobalOutBoxIndexEntryId ) );
hgs
parents:
diff changeset
   754
    }
hgs
parents:
diff changeset
   755
hgs
parents:
diff changeset
   756
// ----------------------------------------------------
hgs
parents:
diff changeset
   757
// CMceMainViewListItemArray::HandleSessionEventL
hgs
parents:
diff changeset
   758
// ----------------------------------------------------
hgs
parents:
diff changeset
   759
void CMceMainViewListItemArray::HandleSessionEventL(
hgs
parents:
diff changeset
   760
    TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
hgs
parents:
diff changeset
   761
    {
hgs
parents:
diff changeset
   762
    switch (aEvent)
hgs
parents:
diff changeset
   763
        {
hgs
parents:
diff changeset
   764
    case EMsvEntriesCreated:
hgs
parents:
diff changeset
   765
    case EMsvEntriesChanged:
hgs
parents:
diff changeset
   766
    case EMsvEntriesDeleted:
hgs
parents:
diff changeset
   767
    case EMsvMediaChanged:
hgs
parents:
diff changeset
   768
    case EMsvMediaUnavailable:
hgs
parents:
diff changeset
   769
    case EMsvMediaAvailable:
hgs
parents:
diff changeset
   770
        Reset();
hgs
parents:
diff changeset
   771
        AddFoldersL();
hgs
parents:
diff changeset
   772
        break;
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
    case EMsvCloseSession:        
hgs
parents:
diff changeset
   775
        break;
hgs
parents:
diff changeset
   776
hgs
parents:
diff changeset
   777
    default:
hgs
parents:
diff changeset
   778
        break;
hgs
parents:
diff changeset
   779
        }
hgs
parents:
diff changeset
   780
    }
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
// ----------------------------------------------------
hgs
parents:
diff changeset
   783
// CMceMainViewListItemArray::StripAndAppendString
hgs
parents:
diff changeset
   784
// ----------------------------------------------------
hgs
parents:
diff changeset
   785
void CMceMainViewListItemArray::StripAndAppendString(TDes& aTargetString, const TDesC& aSourceString) const
hgs
parents:
diff changeset
   786
    {
hgs
parents:
diff changeset
   787
    TRAP_IGNORE( MceUtils::StripAndAppendStringL(
hgs
parents:
diff changeset
   788
        aTargetString,
hgs
parents:
diff changeset
   789
        aSourceString,
hgs
parents:
diff changeset
   790
        iDescriptionLength ) );
hgs
parents:
diff changeset
   791
    }
hgs
parents:
diff changeset
   792
hgs
parents:
diff changeset
   793
// ----------------------------------------------------
hgs
parents:
diff changeset
   794
// CMceMainViewListItemArray::IsFolderRemote
hgs
parents:
diff changeset
   795
// return ETrue, if remote folder
hgs
parents:
diff changeset
   796
//
hgs
parents:
diff changeset
   797
// ----------------------------------------------------
hgs
parents:
diff changeset
   798
TBool CMceMainViewListItemArray::IsFolderRemote() const
hgs
parents:
diff changeset
   799
    {
hgs
parents:
diff changeset
   800
    TMsvId service = KMsvLocalServiceIndexEntryId;
hgs
parents:
diff changeset
   801
    TMsvEntry entry;
hgs
parents:
diff changeset
   802
    if ( iSession->GetEntry(KMsvRootIndexEntryId,service,entry) == KErrNone )
hgs
parents:
diff changeset
   803
    	{
hgs
parents:
diff changeset
   804
    	return KMsvLocalServiceIndexEntryId != service;
hgs
parents:
diff changeset
   805
    	}
hgs
parents:
diff changeset
   806
    else
hgs
parents:
diff changeset
   807
    	{
hgs
parents:
diff changeset
   808
    	return EFalse;
hgs
parents:
diff changeset
   809
    	}
hgs
parents:
diff changeset
   810
    }
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
// ----------------------------------------------------
hgs
parents:
diff changeset
   813
// CMceMainViewListItemArray::ConstructMainViewL
hgs
parents:
diff changeset
   814
// add folders in main view
hgs
parents:
diff changeset
   815
//
hgs
parents:
diff changeset
   816
// ----------------------------------------------------
hgs
parents:
diff changeset
   817
hgs
parents:
diff changeset
   818
void CMceMainViewListItemArray::ConstructMainViewL()
hgs
parents:
diff changeset
   819
    {
hgs
parents:
diff changeset
   820
    delete iFolderEntry;
hgs
parents:
diff changeset
   821
    iFolderEntry = NULL;
hgs
parents:
diff changeset
   822
    iFolderEntry = CMsvEntry::NewL(
hgs
parents:
diff changeset
   823
        *iSession,
hgs
parents:
diff changeset
   824
        KMsvRootIndexEntryId,
hgs
parents:
diff changeset
   825
        TMsvSelectionOrdering(
hgs
parents:
diff changeset
   826
            KMsvGroupByStandardFolders, EMsvSortByDetails ) );
hgs
parents:
diff changeset
   827
    AddFoldersL();
hgs
parents:
diff changeset
   828
    }
hgs
parents:
diff changeset
   829
hgs
parents:
diff changeset
   830
// ----------------------------------------------------
hgs
parents:
diff changeset
   831
// CMceMainViewListItemArray::FolderId
hgs
parents:
diff changeset
   832
// return folder id
hgs
parents:
diff changeset
   833
//
hgs
parents:
diff changeset
   834
// ----------------------------------------------------
hgs
parents:
diff changeset
   835
TMsvId CMceMainViewListItemArray::FolderId() const
hgs
parents:
diff changeset
   836
    {
hgs
parents:
diff changeset
   837
    return KMsvRootIndexEntryId;
hgs
parents:
diff changeset
   838
    }
hgs
parents:
diff changeset
   839
hgs
parents:
diff changeset
   840
hgs
parents:
diff changeset
   841
// ----------------------------------------------------
hgs
parents:
diff changeset
   842
// CMceMainViewListItemArray::IsConnected
hgs
parents:
diff changeset
   843
// return ETrue, if account is connected
hgs
parents:
diff changeset
   844
//
hgs
parents:
diff changeset
   845
// ----------------------------------------------------
hgs
parents:
diff changeset
   846
TBool CMceMainViewListItemArray::IsConnected() const
hgs
parents:
diff changeset
   847
    {
hgs
parents:
diff changeset
   848
    TMsvEntry entry;
hgs
parents:
diff changeset
   849
    entry = iFolderEntry->Entry();
hgs
parents:
diff changeset
   850
hgs
parents:
diff changeset
   851
    TMsvEntry serviceEntry;
hgs
parents:
diff changeset
   852
    TMsvId serviceId;
hgs
parents:
diff changeset
   853
    if ( iSession->GetEntry(entry.iServiceId,serviceId,serviceEntry) == KErrNone )
hgs
parents:
diff changeset
   854
    	{
hgs
parents:
diff changeset
   855
    	return serviceEntry.Connected();
hgs
parents:
diff changeset
   856
    	}
hgs
parents:
diff changeset
   857
    else
hgs
parents:
diff changeset
   858
    	{
hgs
parents:
diff changeset
   859
    	return EFalse;
hgs
parents:
diff changeset
   860
    	}
hgs
parents:
diff changeset
   861
    }
hgs
parents:
diff changeset
   862
hgs
parents:
diff changeset
   863
hgs
parents:
diff changeset
   864
// ----------------------------------------------------
hgs
parents:
diff changeset
   865
// CMceMainViewListItemArray::AlwaysOnlineDateTimeValidL
hgs
parents:
diff changeset
   866
// 
hgs
parents:
diff changeset
   867
//
hgs
parents:
diff changeset
   868
// ----------------------------------------------------
hgs
parents:
diff changeset
   869
TBool CMceMainViewListItemArray::AlwaysOnlineDateTimeValidL( const TMsvId aAccount, TBool &aoDefined ) const
hgs
parents:
diff changeset
   870
    {
hgs
parents:
diff changeset
   871
    // Check if the always online is turned on
hgs
parents:
diff changeset
   872
    TInt64 flags = 0;    
hgs
parents:
diff changeset
   873
    iEmailApi->MailboxUtilitiesL().QueryAlwaysOnlineStateL( 
hgs
parents:
diff changeset
   874
        aAccount, flags );
hgs
parents:
diff changeset
   875
                    
hgs
parents:
diff changeset
   876
    aoDefined = 
hgs
parents:
diff changeset
   877
        ( flags & MImumInMailboxUtilities::EFlagTurnedOn ) ? ETrue : EFalse;            
hgs
parents:
diff changeset
   878
    return ( flags & MImumInMailboxUtilities::EFlagWaitingToConnect ) ? 
hgs
parents:
diff changeset
   879
        ETrue : EFalse;
hgs
parents:
diff changeset
   880
    }
hgs
parents:
diff changeset
   881
hgs
parents:
diff changeset
   882
// ----------------------------------------------------
hgs
parents:
diff changeset
   883
// CMceMainViewListItemArray::AlwaysOnlineAccountL
hgs
parents:
diff changeset
   884
//
hgs
parents:
diff changeset
   885
// ----------------------------------------------------
hgs
parents:
diff changeset
   886
TBool CMceMainViewListItemArray::AlwaysOnlineAccountL( 
hgs
parents:
diff changeset
   887
	const TMsvId /*aAccount*/, 
hgs
parents:
diff changeset
   888
    const CImumInSettingsData& aSettingsData ) const
hgs
parents:
diff changeset
   889
    {
hgs
parents:
diff changeset
   890
    TInt online = 0;
hgs
parents:
diff changeset
   891
    aSettingsData.GetAttr( TImumDaSettings::EKeyAutoRetrieval, online );
hgs
parents:
diff changeset
   892
    return online != TImumDaSettings::EValueAutoOff;
hgs
parents:
diff changeset
   893
    }
hgs
parents:
diff changeset
   894
hgs
parents:
diff changeset
   895
// ----------------------------------------------------
hgs
parents:
diff changeset
   896
// CMceMainViewListItemArray::SetRoaming
hgs
parents:
diff changeset
   897
// sets roaming flag
hgs
parents:
diff changeset
   898
//
hgs
parents:
diff changeset
   899
// ----------------------------------------------------
hgs
parents:
diff changeset
   900
void CMceMainViewListItemArray::SetRoaming( TBool aRoaming )
hgs
parents:
diff changeset
   901
    {
hgs
parents:
diff changeset
   902
    iRoaming = aRoaming;
hgs
parents:
diff changeset
   903
    }
hgs
parents:
diff changeset
   904
hgs
parents:
diff changeset
   905
// ----------------------------------------------------
hgs
parents:
diff changeset
   906
// CMceMainViewListItemArray::Roaming
hgs
parents:
diff changeset
   907
// gets roaming flag
hgs
parents:
diff changeset
   908
//
hgs
parents:
diff changeset
   909
// ----------------------------------------------------
hgs
parents:
diff changeset
   910
TBool CMceMainViewListItemArray::Roaming() const
hgs
parents:
diff changeset
   911
    {
hgs
parents:
diff changeset
   912
    return iRoaming;
hgs
parents:
diff changeset
   913
    }
hgs
parents:
diff changeset
   914
hgs
parents:
diff changeset
   915
// ----------------------------------------------------
hgs
parents:
diff changeset
   916
// CMceMainViewListItemArray::SetAlwaysOnline
hgs
parents:
diff changeset
   917
// sets always online flag
hgs
parents:
diff changeset
   918
//
hgs
parents:
diff changeset
   919
// ----------------------------------------------------
hgs
parents:
diff changeset
   920
void CMceMainViewListItemArray::SetAlwaysOnline( TBool aAlwaysOnline )
hgs
parents:
diff changeset
   921
    {
hgs
parents:
diff changeset
   922
    iAlwaysOnline = aAlwaysOnline;
hgs
parents:
diff changeset
   923
    }
hgs
parents:
diff changeset
   924
hgs
parents:
diff changeset
   925
// ----------------------------------------------------
hgs
parents:
diff changeset
   926
// CMceMainViewListItemArray::GetEmailApi
hgs
parents:
diff changeset
   927
// Returns the reference to the email API
hgs
parents:
diff changeset
   928
// ----------------------------------------------------
hgs
parents:
diff changeset
   929
CImumInternalApi* CMceMainViewListItemArray::GetEmailApi()
hgs
parents:
diff changeset
   930
    {
hgs
parents:
diff changeset
   931
    return iEmailApi;
hgs
parents:
diff changeset
   932
    }
hgs
parents:
diff changeset
   933
hgs
parents:
diff changeset
   934
// ----------------------------------------------------
hgs
parents:
diff changeset
   935
// CMceMainViewListItemArray::
hgs
parents:
diff changeset
   936
// ----------------------------------------------------
hgs
parents:
diff changeset
   937
void CMceMainViewListItemArray::AppendMessageCountString( TDes& aBuffer, TInt aMessageCount ) const
hgs
parents:
diff changeset
   938
    {
hgs
parents:
diff changeset
   939
    aBuffer.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   940
    if ( aMessageCount == 0)
hgs
parents:
diff changeset
   941
        {
hgs
parents:
diff changeset
   942
        aBuffer.Append( (*iNumberOfMessagesStrings)[
hgs
parents:
diff changeset
   943
            KMceListArrayDocNoMessages] );
hgs
parents:
diff changeset
   944
        }
hgs
parents:
diff changeset
   945
    else if ( aMessageCount == 1 )
hgs
parents:
diff changeset
   946
        {
hgs
parents:
diff changeset
   947
        TBuf<KMcePrintableTextLength> tempString;
hgs
parents:
diff changeset
   948
        tempString.Append((*iNumberOfMessagesStrings)[
hgs
parents:
diff changeset
   949
            KMceListArrayNumberOneMessage] );
hgs
parents:
diff changeset
   950
        AknTextUtils::LanguageSpecificNumberConversion( tempString );
hgs
parents:
diff changeset
   951
        aBuffer.Append( tempString );
hgs
parents:
diff changeset
   952
        }
hgs
parents:
diff changeset
   953
    else
hgs
parents:
diff changeset
   954
        {
hgs
parents:
diff changeset
   955
        TBuf<KMcePrintableTextLength> tempString;
hgs
parents:
diff changeset
   956
        StringLoader::Format( tempString,
hgs
parents:
diff changeset
   957
            (*iNumberOfMessagesStrings)[KMceListArrayNumberOfMsgs],
hgs
parents:
diff changeset
   958
            -1, // no index in the key string
hgs
parents:
diff changeset
   959
            aMessageCount );
hgs
parents:
diff changeset
   960
        AknTextUtils::LanguageSpecificNumberConversion( tempString );
hgs
parents:
diff changeset
   961
        aBuffer.Append( tempString );
hgs
parents:
diff changeset
   962
        }
hgs
parents:
diff changeset
   963
    }
hgs
parents:
diff changeset
   964
    
hgs
parents:
diff changeset
   965
hgs
parents:
diff changeset
   966
// ----------------------------------------------------
hgs
parents:
diff changeset
   967
// CMceMainViewListItemArray::GetHealthyMailboxListResult( TInt& aCount )
hgs
parents:
diff changeset
   968
// ----------------------------------------------------    
hgs
parents:
diff changeset
   969
TInt CMceMainViewListItemArray::GetHealthyMailboxListResult( TInt& aCount )
hgs
parents:
diff changeset
   970
    {
hgs
parents:
diff changeset
   971
    aCount = iMaiboxArrayCount;
hgs
parents:
diff changeset
   972
    return iErrGetHealthyMailBoxList;
hgs
parents:
diff changeset
   973
    }  
hgs
parents:
diff changeset
   974
hgs
parents:
diff changeset
   975
// ----------------------------------------------------
hgs
parents:
diff changeset
   976
// CMceMainViewListItemArray::
hgs
parents:
diff changeset
   977
// ----------------------------------------------------
hgs
parents:
diff changeset
   978
void CMceMainViewListItemArray::StartListUpdateL()
hgs
parents:
diff changeset
   979
    {
hgs
parents:
diff changeset
   980
    const TInt count = Count();
hgs
parents:
diff changeset
   981
    TInt i = 0;
hgs
parents:
diff changeset
   982
    for ( i = 0; i < count; i++ )
hgs
parents:
diff changeset
   983
        {
hgs
parents:
diff changeset
   984
        At( i ).iIconIndex = KErrNotFound;
hgs
parents:
diff changeset
   985
        }
hgs
parents:
diff changeset
   986
    iIdleCounter = 0; // update only item which icon index is not valid
hgs
parents:
diff changeset
   987
    if ( iIdleLoader )
hgs
parents:
diff changeset
   988
        {
hgs
parents:
diff changeset
   989
        iIdleLoader->StartL();
hgs
parents:
diff changeset
   990
        }
hgs
parents:
diff changeset
   991
    }
hgs
parents:
diff changeset
   992
hgs
parents:
diff changeset
   993
// ----------------------------------------------------
hgs
parents:
diff changeset
   994
// CMceMainViewListItemArray::
hgs
parents:
diff changeset
   995
// ----------------------------------------------------
hgs
parents:
diff changeset
   996
void CMceMainViewListItemArray::ResetIconIndexL( TInt aIndex )
hgs
parents:
diff changeset
   997
    {
hgs
parents:
diff changeset
   998
    iIdleCounter = 0;
hgs
parents:
diff changeset
   999
    At( aIndex ).iIconIndex = KErrNotFound;
hgs
parents:
diff changeset
  1000
    if ( iIdleLoader )
hgs
parents:
diff changeset
  1001
        {
hgs
parents:
diff changeset
  1002
        iIdleLoader->StartL();
hgs
parents:
diff changeset
  1003
        }
hgs
parents:
diff changeset
  1004
    }
hgs
parents:
diff changeset
  1005
hgs
parents:
diff changeset
  1006
// ----------------------------------------------------
hgs
parents:
diff changeset
  1007
// CMceMainViewListItemArray::
hgs
parents:
diff changeset
  1008
// ----------------------------------------------------
hgs
parents:
diff changeset
  1009
TBool CMceMainViewListItemArray::MMceUtilsIdleClassStepL( )
hgs
parents:
diff changeset
  1010
    {
hgs
parents:
diff changeset
  1011
    const TInt count = Count();
hgs
parents:
diff changeset
  1012
    // iIdleCounter set to 0 in functions StartListUpdateL and ResetIconIndexL
hgs
parents:
diff changeset
  1013
    for ( ; iIdleCounter < count; iIdleCounter++ )
hgs
parents:
diff changeset
  1014
        {
hgs
parents:
diff changeset
  1015
        TMceListItem& item = At( iIdleCounter );
hgs
parents:
diff changeset
  1016
        if ( !item.iExtraItem && ( item.iIconIndex <= KErrNone || item.iIconIndex > iBitmapResolver.MtmIconIndex() ) )
hgs
parents:
diff changeset
  1017
            {
hgs
parents:
diff changeset
  1018
            TMsvEntry entry;
hgs
parents:
diff changeset
  1019
            TMsvId serviceId;
hgs
parents:
diff changeset
  1020
            if ( iSession->GetEntry( item.iMsvId, serviceId, entry ) == KErrNone )
hgs
parents:
diff changeset
  1021
                {
hgs
parents:
diff changeset
  1022
                TInt messageCount = 0;
hgs
parents:
diff changeset
  1023
                TMsvId id = entry.Id();
hgs
parents:
diff changeset
  1024
                item.iIconIndex = iBitmapResolver.BitmapIndex( entry, messageCount );  
hgs
parents:
diff changeset
  1025
                if(iDefaultViewSettings == KMceConversationview && id == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
  1026
                    {
hgs
parents:
diff changeset
  1027
                    item.iIconIndex = EMceBitmapIndexInbox;                    
hgs
parents:
diff changeset
  1028
                    }
hgs
parents:
diff changeset
  1029
                  item.iMessageCount = messageCount;
hgs
parents:
diff changeset
  1030
//                        item.iUnreadMessageCount = unreadMessageCount;
hgs
parents:
diff changeset
  1031
                if ( iListItemArrayObserver )
hgs
parents:
diff changeset
  1032
                    {
hgs
parents:
diff changeset
  1033
                    iListItemArrayObserver->MceListItemArrayChangedL();
hgs
parents:
diff changeset
  1034
                    }
hgs
parents:
diff changeset
  1035
//                    iIdleCounter++;
hgs
parents:
diff changeset
  1036
                break;
hgs
parents:
diff changeset
  1037
                }
hgs
parents:
diff changeset
  1038
            }
hgs
parents:
diff changeset
  1039
        }
hgs
parents:
diff changeset
  1040
    return iIdleCounter < count;
hgs
parents:
diff changeset
  1041
    }
hgs
parents:
diff changeset
  1042
hgs
parents:
diff changeset
  1043
// ----------------------------------------------------
hgs
parents:
diff changeset
  1044
// CMceMainViewListItemArray::
hgs
parents:
diff changeset
  1045
// ----------------------------------------------------
hgs
parents:
diff changeset
  1046
void CMceMainViewListItemArray::SetListItemArrayObserver( MMceMainViewListItemArrayObserver* aObserver )
hgs
parents:
diff changeset
  1047
    {
hgs
parents:
diff changeset
  1048
    iListItemArrayObserver = aObserver;
hgs
parents:
diff changeset
  1049
    }
hgs
parents:
diff changeset
  1050
hgs
parents:
diff changeset
  1051
// ----------------------------------------------------
hgs
parents:
diff changeset
  1052
// CMceMainViewListView::ReadExtraItemsResourceL
hgs
parents:
diff changeset
  1053
// ----------------------------------------------------
hgs
parents:
diff changeset
  1054
void CMceMainViewListItemArray::ReadExtraItemsResourceL()
hgs
parents:
diff changeset
  1055
    {
hgs
parents:
diff changeset
  1056
    if ( !iExtraItemsArray )
hgs
parents:
diff changeset
  1057
        {
hgs
parents:
diff changeset
  1058
        iExtraItemsArray = new( ELeave ) CMceMainViewExtraItemArray( KMceListGranuality );
hgs
parents:
diff changeset
  1059
        }
hgs
parents:
diff changeset
  1060
    else
hgs
parents:
diff changeset
  1061
        {
hgs
parents:
diff changeset
  1062
        iExtraItemsArray->Reset();
hgs
parents:
diff changeset
  1063
        }
hgs
parents:
diff changeset
  1064
    
hgs
parents:
diff changeset
  1065
    _LIT(KDirAndMceExtraItemsResFileName,"mceextraitems.rsc");
hgs
parents:
diff changeset
  1066
            TFileName fileName; 
hgs
parents:
diff changeset
  1067
		    fileName.Insert( 0,KDC_APP_RESOURCE_DIR );
hgs
parents:
diff changeset
  1068
		    fileName.Append( KDirAndMceExtraItemsResFileName );
hgs
parents:
diff changeset
  1069
            TFindFile finder( iCoeEnv->FsSession() );
hgs
parents:
diff changeset
  1070
            //Search Y->A then Z:
hgs
parents:
diff changeset
  1071
		    BaflUtils::NearestLanguageFile(iCoeEnv->FsSession(),fileName);
hgs
parents:
diff changeset
  1072
		    TInt err = finder.FindByDir(fileName , KDC_APP_RESOURCE_DIR );
hgs
parents:
diff changeset
  1073
            if(err == KErrNone)
hgs
parents:
diff changeset
  1074
		        {                            
hgs
parents:
diff changeset
  1075
                RConeResourceLoader resources( *iCoeEnv );
hgs
parents:
diff changeset
  1076
hgs
parents:
diff changeset
  1077
                TInt err = KErrNone;
hgs
parents:
diff changeset
  1078
                TRAP( err, resources.OpenL(fileName) );
hgs
parents:
diff changeset
  1079
hgs
parents:
diff changeset
  1080
                if ( err == KErrNone )
hgs
parents:
diff changeset
  1081
                    {
hgs
parents:
diff changeset
  1082
                    TResourceReader reader;
hgs
parents:
diff changeset
  1083
                    iEikonEnv->CreateResourceReaderLC( reader, R_MCE_EXTRA_ITEMS );
hgs
parents:
diff changeset
  1084
hgs
parents:
diff changeset
  1085
                    const TInt count = reader.ReadInt16();
hgs
parents:
diff changeset
  1086
                    TMceMainViewExtraItem extraItem;
hgs
parents:
diff changeset
  1087
                    extraItem.iCommandId = KMceFirstExtraItemId;
hgs
parents:
diff changeset
  1088
                    for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
  1089
                        {
hgs
parents:
diff changeset
  1090
                        HBufC* txt = reader.ReadHBufCL();   // message text
hgs
parents:
diff changeset
  1091
                        extraItem.iPrintableText.Copy( *txt );
hgs
parents:
diff changeset
  1092
                        delete txt;
hgs
parents:
diff changeset
  1093
                        txt = NULL;
hgs
parents:
diff changeset
  1094
                        txt = reader.ReadHBufCL();   // message text
hgs
parents:
diff changeset
  1095
                        extraItem.iCommandText.Copy( *txt );
hgs
parents:
diff changeset
  1096
                        delete txt;
hgs
parents:
diff changeset
  1097
hgs
parents:
diff changeset
  1098
                        TInt depricatedResource = reader.ReadInt16(); // this is not used anymore, but left in resource so no DC break.
hgs
parents:
diff changeset
  1099
                        extraItem.iIconIndex = reader.ReadInt16();
hgs
parents:
diff changeset
  1100
                        TUid applicationUid;
hgs
parents:
diff changeset
  1101
                        applicationUid.iUid = reader.ReadUint32();
hgs
parents:
diff changeset
  1102
                        extraItem.iApplicationUid = applicationUid.iUid;
hgs
parents:
diff changeset
  1103
                        // secondary text
hgs
parents:
diff changeset
  1104
                        txt = reader.ReadHBufCL();   //secondary text                       
hgs
parents:
diff changeset
  1105
                        if(txt)
hgs
parents:
diff changeset
  1106
                            {
hgs
parents:
diff changeset
  1107
                            extraItem.iSecondaryText.Copy( *txt );
hgs
parents:
diff changeset
  1108
                            delete txt;
hgs
parents:
diff changeset
  1109
                            txt = NULL;
hgs
parents:
diff changeset
  1110
                            }   
hgs
parents:
diff changeset
  1111
                        else
hgs
parents:
diff changeset
  1112
                            {
hgs
parents:
diff changeset
  1113
                            extraItem.iSecondaryText.Copy(KNullDesC());
hgs
parents:
diff changeset
  1114
                            }
hgs
parents:
diff changeset
  1115
                        iExtraItemsArray->AppendL( extraItem );
hgs
parents:
diff changeset
  1116
                        extraItem.iCommandId++;
hgs
parents:
diff changeset
  1117
                        }
hgs
parents:
diff changeset
  1118
                    CleanupStack::PopAndDestroy(); // reader
hgs
parents:
diff changeset
  1119
                    resources.Close();
hgs
parents:
diff changeset
  1120
                    }
hgs
parents:
diff changeset
  1121
                }
hgs
parents:
diff changeset
  1122
            }
hgs
parents:
diff changeset
  1123
hgs
parents:
diff changeset
  1124
hgs
parents:
diff changeset
  1125
// ----------------------------------------------------
hgs
parents:
diff changeset
  1126
// CMceMainViewListView::ExtraItemCommandLC
hgs
parents:
diff changeset
  1127
// ----------------------------------------------------
hgs
parents:
diff changeset
  1128
HBufC* CMceMainViewListItemArray::ExtraItemCommandLC( TInt aCommandId )
hgs
parents:
diff changeset
  1129
    {
hgs
parents:
diff changeset
  1130
    HBufC* commandText = HBufC::NewLC( KMcePrintableTextLength );
hgs
parents:
diff changeset
  1131
    TPtr tempText = commandText->Des();
hgs
parents:
diff changeset
  1132
    
hgs
parents:
diff changeset
  1133
    const TInt count = iExtraItemsArray->Count();
hgs
parents:
diff changeset
  1134
    for (TInt i=0; i<count; i++ )
hgs
parents:
diff changeset
  1135
        {
hgs
parents:
diff changeset
  1136
        if ( aCommandId == (*iExtraItemsArray)[i].iCommandId )
hgs
parents:
diff changeset
  1137
            {
hgs
parents:
diff changeset
  1138
            tempText.Copy( (*iExtraItemsArray)[i].iCommandText );
hgs
parents:
diff changeset
  1139
            i=count;
hgs
parents:
diff changeset
  1140
            }
hgs
parents:
diff changeset
  1141
        }
hgs
parents:
diff changeset
  1142
    
hgs
parents:
diff changeset
  1143
    return commandText;    
hgs
parents:
diff changeset
  1144
    }
hgs
parents:
diff changeset
  1145
    
hgs
parents:
diff changeset
  1146
// ----------------------------------------------------
hgs
parents:
diff changeset
  1147
// CMceMainViewListView::AddExtraItemCommandL
hgs
parents:
diff changeset
  1148
// ----------------------------------------------------
hgs
parents:
diff changeset
  1149
void CMceMainViewListItemArray::AddExtraItemCommandL( TInt aIndex )
hgs
parents:
diff changeset
  1150
    {
hgs
parents:
diff changeset
  1151
    if ( aIndex < iExtraItemsArray->Count() )
hgs
parents:
diff changeset
  1152
        {
hgs
parents:
diff changeset
  1153
        const TMceMainViewExtraItem& extraItem = (*iExtraItemsArray)[aIndex];
hgs
parents:
diff changeset
  1154
        TMceListItem tempItem;
hgs
parents:
diff changeset
  1155
        tempItem.iExtraItem = ETrue;
hgs
parents:
diff changeset
  1156
        tempItem.iMsvId = extraItem.iCommandId;
hgs
parents:
diff changeset
  1157
       	tempItem.iPrintableText.Copy( extraItem.iPrintableText );
hgs
parents:
diff changeset
  1158
       	tempItem.iSecondaryText.Copy(extraItem.iSecondaryText);
hgs
parents:
diff changeset
  1159
       	tempItem.iApplicationUid = extraItem.iApplicationUid; 
hgs
parents:
diff changeset
  1160
       	TUid appUid;
hgs
parents:
diff changeset
  1161
       	appUid.iUid = extraItem.iApplicationUid;
hgs
parents:
diff changeset
  1162
       	AddExtraItemWithIconL( tempItem, Count(), extraItem.iIconIndex, appUid );
hgs
parents:
diff changeset
  1163
        }
hgs
parents:
diff changeset
  1164
    }
hgs
parents:
diff changeset
  1165
hgs
parents:
diff changeset
  1166
// ----------------------------------------------------
hgs
parents:
diff changeset
  1167
// CMceMainViewListView::ReadMainViewItemsFromRepositoryL
hgs
parents:
diff changeset
  1168
// ----------------------------------------------------
hgs
parents:
diff changeset
  1169
void CMceMainViewListItemArray::ReadMainViewItemsFromRepositoryL()
hgs
parents:
diff changeset
  1170
    {
hgs
parents:
diff changeset
  1171
    if ( !iMainViewItems )
hgs
parents:
diff changeset
  1172
        {
hgs
parents:
diff changeset
  1173
        iMainViewItems = new( ELeave ) CMsvEntrySelection();
hgs
parents:
diff changeset
  1174
        }
hgs
parents:
diff changeset
  1175
    else
hgs
parents:
diff changeset
  1176
        {
hgs
parents:
diff changeset
  1177
        iMainViewItems->Reset();        
hgs
parents:
diff changeset
  1178
        }
hgs
parents:
diff changeset
  1179
    CRepository* repository = CRepository::NewLC(KCRUidMuiuSettings);
hgs
parents:
diff changeset
  1180
    for ( TInt i = KMuiuMceMainViewRow1; i<=KMuiuMceMainViewRow16; i++ )
hgs
parents:
diff changeset
  1181
        {
hgs
parents:
diff changeset
  1182
        TInt value = 0;
hgs
parents:
diff changeset
  1183
        if ( repository->Get( i, value ) == KErrNone && value > KErrNotFound )
hgs
parents:
diff changeset
  1184
            {
hgs
parents:
diff changeset
  1185
            iMainViewItems->AppendL( value );
hgs
parents:
diff changeset
  1186
            }
hgs
parents:
diff changeset
  1187
        }
hgs
parents:
diff changeset
  1188
    CleanupStack::PopAndDestroy( repository );
hgs
parents:
diff changeset
  1189
    }
hgs
parents:
diff changeset
  1190
hgs
parents:
diff changeset
  1191
// ----------------------------------------------------
hgs
parents:
diff changeset
  1192
// CMceMainViewListItemArray::CreateConversationsListItem()
hgs
parents:
diff changeset
  1193
// ----------------------------------------------------
hgs
parents:
diff changeset
  1194
TPtrC CMceMainViewListItemArray::CreateConversationsListItem( TInt aIndex ) const
hgs
parents:
diff changeset
  1195
    {
hgs
parents:
diff changeset
  1196
    const TMceListItem& item = At( aIndex );
hgs
parents:
diff changeset
  1197
    //if item iText is not cached then cache it first
hgs
parents:
diff changeset
  1198
    if((item.iText.Length()==0)||(!iListItemArrayObserver->MceListItemArrayFlickEvent()))
hgs
parents:
diff changeset
  1199
       {       
hgs
parents:
diff changeset
  1200
        TPtr tempText = iListBoxText->Des();        
hgs
parents:
diff changeset
  1201
        tempText.Zero();
hgs
parents:
diff changeset
  1202
        TInt bitmapidx = EMceBitmapIndexConversation;
hgs
parents:
diff changeset
  1203
        if(iDefaultViewSettings == KMceConversationview )
hgs
parents:
diff changeset
  1204
           {
hgs
parents:
diff changeset
  1205
           TInt unreadMessages = 0;
hgs
parents:
diff changeset
  1206
		   //To check  whether unread message presents in inbox
hgs
parents:
diff changeset
  1207
           TRAPD( err, iBitmapResolver.FindVisibleCountWithUnreadMessageL( KMsvGlobalInBoxIndexEntryId, unreadMessages ));
hgs
parents:
diff changeset
  1208
           if ( err == KErrNone && unreadMessages )
hgs
parents:
diff changeset
  1209
               {
hgs
parents:
diff changeset
  1210
               bitmapidx =  EMceBitmapIndexConversationNew ;
hgs
parents:
diff changeset
  1211
               }
hgs
parents:
diff changeset
  1212
           }    
hgs
parents:
diff changeset
  1213
        tempText.AppendNum(bitmapidx);
hgs
parents:
diff changeset
  1214
        TPtrC Ptr(item.iPrintableText);          
hgs
parents:
diff changeset
  1215
        TInt  pos = Ptr.Locate(KColumnListSeparator);
hgs
parents:
diff changeset
  1216
        TPtrC Ptr1(Ptr.Mid(pos));
hgs
parents:
diff changeset
  1217
        tempText.Append(Ptr1);                
hgs
parents:
diff changeset
  1218
        CONST_CAST( TMceListItem*, &item)->iText.Zero();
hgs
parents:
diff changeset
  1219
        CONST_CAST( TMceListItem*, &item)->iText.Copy(tempText);
hgs
parents:
diff changeset
  1220
        return tempText;
hgs
parents:
diff changeset
  1221
       }
hgs
parents:
diff changeset
  1222
    else
hgs
parents:
diff changeset
  1223
       {
hgs
parents:
diff changeset
  1224
       return item.iText;
hgs
parents:
diff changeset
  1225
       }      
hgs
parents:
diff changeset
  1226
   }
hgs
parents:
diff changeset
  1227
hgs
parents:
diff changeset
  1228
// ----------------------------------------------------
hgs
parents:
diff changeset
  1229
// CMceMainViewListItemArray::SetDefaultViewSettings()
hgs
parents:
diff changeset
  1230
// ----------------------------------------------------
hgs
parents:
diff changeset
  1231
void CMceMainViewListItemArray::SetDefaultViewSettings(TBool aVal)
hgs
parents:
diff changeset
  1232
    {
hgs
parents:
diff changeset
  1233
    iDefaultViewSettings = aVal;   
hgs
parents:
diff changeset
  1234
    Reset();
hgs
parents:
diff changeset
  1235
    TRAP_IGNORE(AddFoldersL());
hgs
parents:
diff changeset
  1236
    }
hgs
parents:
diff changeset
  1237
//  End of File