# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1279208077 -10800 # Node ID 696bfeff199ea12ba7ae42a04752ce9e9bd12735 # Parent 1367103c24e203ce0f510adf016b4f8592bde393 Revision: 201025 Kit: 2010127 diff -r 1367103c24e2 -r 696bfeff199e email/imap4mtm/imapsession/src/cimapsession.cpp --- a/email/imap4mtm/imapsession/src/cimapsession.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/email/imap4mtm/imapsession/src/cimapsession.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -1412,21 +1412,14 @@ if (err != KErrNone) { - if(err == KErrImapCorrupt) - { - continueReadingData = ETrue; - } - else - { - // As well as completing, destroy the command to help free up resources. - CompleteAndDestroyCommand(err, ETrue); + // As well as completing, destroy the command to help free up resources. + CompleteAndDestroyCommand(err, ETrue); - // Don't allow the session to be called again. - SetSessionState(ESessionUnrecoverable); - - return; - } - }// end of if (err != KErrNone) + // Don't allow the session to be called again. + SetSessionState(ESessionUnrecoverable); + + return; + } // If a literal block is expected next, then find out how big it is expected to be. switch (commandParseState) diff -r 1367103c24e2 -r 696bfeff199e email/imap4mtm/imapsyncmanager/src/cimapfolder.cpp --- a/email/imap4mtm/imapsyncmanager/src/cimapfolder.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/email/imap4mtm/imapsyncmanager/src/cimapfolder.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" @@ -96,6 +96,12 @@ iMatchingMessageIds.Reset(); iDeletedMessageIds.Reset(); iMissingMessageIds.Reset(); + + if(iCachedEntryData) + { + iCachedEntryData->Close(); + } + delete iSelection; iFolderIndex->Reset(); iMessageFlagInfoArray.Reset(); @@ -1121,9 +1127,12 @@ SetEntryL(aFolder); GetChildrenL(*aChildren); + if(iCachedEntryData) + { + iCachedEntryData->Close(); + } delete iCachedEntryData; iCachedEntryData = NULL; - iCachedEntryData = new(ELeave) RArray(5); // Go through them, checking to see if they're messages and removing ones that aren't diff -r 1367103c24e2 -r 696bfeff199e email/pop3andsmtpmtm/smtpservermtm/src/IMSM.CPP --- a/email/pop3andsmtpmtm/smtpservermtm/src/IMSM.CPP Mon Jun 21 15:36:19 2010 +0300 +++ b/email/pop3andsmtpmtm/smtpservermtm/src/IMSM.CPP Thu Jul 15 18:34:37 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1998-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" @@ -793,11 +793,10 @@ { // sending of all the emails has completed, no need listen for Mobility Manager delete iMobilityManager; - iMobilityManager=NULL; + iMobilityManager=NULL; delete iSession; iSession = NULL; - delete iSessionManager; iSessionManager = NULL; diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/mce/inc/MceMessageListView.h --- a/messagingappbase/mce/inc/MceMessageListView.h Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/mce/inc/MceMessageListView.h Thu Jul 15 18:34:37 2010 +0300 @@ -627,6 +627,12 @@ * Since 3.2 */ void SetMarkReadUnread( TBool aValue ); + + /** + * This function sets aClearer to iLocalScreenClearer which contains Inbox view + * screen. aClearer is used in CMceUi::HandleGainingForeground() when returning from viewers. + */ + void GetLocalScreenClearer( CAknLocalScreenClearer** &aClearer ); private: // Data diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/mce/inc/mceui.h --- a/messagingappbase/mce/inc/mceui.h Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/mce/inc/mceui.h Thu Jul 15 18:34:37 2010 +0300 @@ -1081,8 +1081,7 @@ CMceBitmapResolver* iBitmapResolver; CMceConnectMailboxTimer* iConnectMailboxTimer; - CMessageIterator* iMessageIterator; - + CMceLogEngine* iMceLogEngine; CAknNavigationControlContainer* iNaviPane; CAknNavigationDecorator* iDecoratedTabGroup; diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/mce/src/MceMessageListContainer.cpp --- a/messagingappbase/mce/src/MceMessageListContainer.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/mce/src/MceMessageListContainer.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -667,7 +667,7 @@ return EKeyWasNotConsumed; } - if ( aKeyEvent.iCode == EKeyBackspace ) + if ( iOwningView.MenuBar()->ItemSpecificCommandsEnabled() && aKeyEvent.iCode == EKeyBackspace ) { MarkItemSelectionL(); SetAnchorItemIdL( diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/mce/src/MceMessageListView.cpp --- a/messagingappbase/mce/src/MceMessageListView.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/mce/src/MceMessageListView.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -434,7 +434,20 @@ iMceUi->SetMceViewActive( EMceMessageViewActive ); - + if ( editorLaunched && + ( msgMtmUid!=KSenduiMtmIrUidValue ) && + ( msgMtmUid!=KSenduiMtmBtUidValue ) && + ( msgMtmUid!=KSenduiMtmSmtpUidValue ) && + ( msgMtmUid!=KSenduiMtmImap4UidValue ) && + ( msgMtmUid!=KSenduiMtmPop3UidValue )) + { + // This is added to remove Inbox view flicker when new message is opened from home screen and + // forwarded + delete iLocalScreenClearer; + iLocalScreenClearer = NULL; + iLocalScreenClearer = CAknLocalScreenClearer::NewL( EFalse ); + } + if ( activateConnQueryTimer ) { if ( entry.iMtm == KSenduiMtmImap4Uid || @@ -4226,5 +4239,13 @@ { iContextCommand = aContextCommandFlag; } - + +// ---------------------------------------------------- +// CMceMessageListView::GetLocalScreenClearer( CAknLocalScreenClearer** &aClearer ) +// ---------------------------------------------------- +void CMceMessageListView::GetLocalScreenClearer( CAknLocalScreenClearer** &aClearer ) + { + aClearer = &iLocalScreenClearer; + } + // End of File diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/mce/src/MceMessageListboxItemDrawer.cpp --- a/messagingappbase/mce/src/MceMessageListboxItemDrawer.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/mce/src/MceMessageListboxItemDrawer.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -57,9 +57,7 @@ { TListItemProperties properties; properties.SetColor( iTextColor ); - properties.SetHiddenSelection( iMessageListContainer.IsOutboxOpened() || - iMessageListContainer.IsItemFolder( aItemIndex ) || - iMessageListContainer.SyncMlOutboxOpened() ); + return properties; } diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/mce/src/mceui.cpp --- a/messagingappbase/mce/src/mceui.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/mce/src/mceui.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -39,7 +39,7 @@ #include #include #include // EMtudCommandTransferSend, EMtudCommandTransferSend, EMtudCommandTransferReceive -#include // cmessageiterator + #include // tmsgexitmode #include // cmuiuoperationwait #include // msvuiserviceutilitiesinternal @@ -271,7 +271,7 @@ // must not delete iSession, session holder takes care of that } delete iMceLogEngine; - delete iMessageIterator; + delete iFolderIndicator; delete iTabsArray; delete iMMSNotifications; @@ -305,6 +305,7 @@ // delete KPSUidMuiu property RProperty::Delete( KPSUidMuiu, KMuiuKeyCurrentMsg ); + RProperty::Delete( KPSUidMuiu, KMuiuKeyNextMsg ); if ( iFeatureMgrEnabled ) // CR : 401-1806 { FeatureManager::UnInitializeLib(); @@ -1177,57 +1178,56 @@ // ---------------------------------------------------- // CMceUi::HandleOpenNextPreviousL // ---------------------------------------------------- -void CMceUi::HandleOpenNextPreviousL( TBool aOpenNext ) +void CMceUi::HandleOpenNextPreviousL( TBool /*aOpenNext*/ ) { MCELOGGER_ENTERFN("HandleOpenNextPreviousL()"); - __ASSERT_DEBUG( iMessageIterator, Panic(EMceUiMessageIteratorNotCreated)); - - if ( iMessageIterator ) - { - TInt error = (aOpenNext ? - iMessageIterator->SetNextMessage() : iMessageIterator->SetPreviousMessage() ); - if ( error == KErrNone ) - { - TBool local = iMceListView->ListContainer()->FolderEntry().iServiceId == KMsvLocalServiceIndexEntryId; - if ( local && !iLocalScreenClearer ) - { - iLocalScreenClearer = CAknLocalScreenClearer::NewL( ETrue ); - } - - // TODO - CMceMessageListContainerBase* container = iMceListView->ListContainer(); - TMsvId currentItemId = iMessageIterator->CurrentMessage().Id(); - if ( container ) + + // Read the next message TMsvId using PS key + TInt nextEntryId = 0; + TInt r = RProperty::Get( KPSUidMuiu, KMuiuKeyNextMsg, nextEntryId ); + if ( r != KErrNone ) + { + nextEntryId = 0; + } + + if ( nextEntryId > 0 ) + { + // no need of following check because TMsvID is set properly + //set from MsgEditorAppUI. + + + TBool local = iMceListView->ListContainer()->FolderEntry().iServiceId == KMsvLocalServiceIndexEntryId; + if ( local && !iLocalScreenClearer ) + { + iLocalScreenClearer = CAknLocalScreenClearer::NewL( ETrue ); + } + + CMceMessageListContainerBase* container = iMceListView->ListContainer(); + + TMsvId currentItemId = nextEntryId; + if ( container ) + { + container->SetCurrentItemIdL( currentItemId ); + container->DrawNow(); + } + + TMsvEntry currentEntry; + TMsvId serviceId; // not used here but needed by GetEntry function + if ( iSession->GetEntry( currentItemId, serviceId, currentEntry ) == KErrNone && + currentEntry.iType == KUidMsvMessageEntry ) + { + TRAPD( err, EditMTMEntryL( currentEntry ) ); + if ( err ) { - container->SetCurrentItemIdL( currentItemId ); - container->DrawNow(); -/* - TInt currentItemIndex = container->ItemIndex( currentItemId ); - if ( currentItemIndex != KErrNotFound ) + if ( iLocalScreenClearer ) { - container->ListBox()->SetCurrentItemIndex( currentItemIndex ); - container->ListBox()->DrawDeferred(); - }*/ + delete iLocalScreenClearer; + iLocalScreenClearer = NULL; + } + User::Leave( err ); } - - TMsvEntry currentEntry; - TMsvId serviceId; // not used here but needed by GetEntry function - if ( iSession->GetEntry( currentItemId, serviceId, currentEntry ) == KErrNone && - currentEntry.iType == KUidMsvMessageEntry ) - { - TRAPD( err, EditMTMEntryL( currentEntry ) ); - if ( err ) - { - if ( iLocalScreenClearer ) - { - delete iLocalScreenClearer; - iLocalScreenClearer = NULL; - } - User::Leave( err ); - } - } - } // end if ( container ) - } // end if ( error == KErrNone ) + } + } // end MCELOGGER_LEAVEFN("HandleOpenNextPreviousL()"); } @@ -2236,16 +2236,6 @@ aCompletionCode == CMsgEmbeddedEditorWatchingOperation::EMsgExitPrevious ) { MCELOGGER_WRITE("CMceUi::DoOperationCompletedL: Opening next/previous"); - if ( iMessageIterator && closedEntryId > 0 ) - { - TMsvEntry currentEntry; - TMsvId serviceId; // not used here but needed by GetEntry function - // Get current entry - if ( iSession->GetEntry( closedEntryId, serviceId, currentEntry ) == KErrNone ) - { - iMessageIterator->SetCurrentMessageL( currentEntry ); - } - } HandleOpenNextPreviousL( aCompletionCode == CMsgEmbeddedEditorWatchingOperation::EMsgExitNext ); if ( !IsForeground() ) @@ -2257,9 +2247,8 @@ } else { - MCELOGGER_WRITE("CMceUi::DoOperationCompletedL: deleting iMessageIterator"); // Viewer closed - if ( closedEntryId > 0 && iMessageIterator ) + if ( closedEntryId > 0 ) { CMceMessageListContainerBase* container = iMceListView->ListContainer(); if ( container ) @@ -2267,9 +2256,7 @@ container->SetCurrentItemIdL( closedEntryId ); } } - delete iMessageIterator; - iMessageIterator = NULL; - } + } if ( !iMceErrorUi ) { @@ -2643,19 +2630,21 @@ { User::LeaveIfError( r ); } + + r = RProperty::Define( KPSUidMuiu, KMuiuKeyNextMsg, RProperty::EInt ); + if ( r != KErrAlreadyExists ) + { + User::LeaveIfError( r ); + } + // Set entry Id value to property if ( aEntry.iType == KUidMsvMessageEntry ) { r = RProperty::Set( KPSUidMuiu, KMuiuKeyCurrentMsg, aEntry.Id() ); + r = RProperty::Set( KPSUidMuiu, KMuiuKeyNextMsg, 0 ); } TBool tabsToCleanupStack = EFalse; - delete iMessageIterator; - iMessageIterator = NULL; - if ( aEntry.iType == KUidMsvMessageEntry ) - { - iMessageIterator = CMessageIterator::NewL( *iSession, aEntry ); - } CBaseMtmUi& mtmUi=iMtmStore->GetMtmUiAndSetContextLC( aEntry ); mtmUi.SetPreferences( mtmUi.Preferences() | EMtmUiFlagEditorPreferEmbedded ); @@ -5562,6 +5551,15 @@ // ---------------------------------------------------- void CMceUi::HandleGainingForeground() // CR : 401-1806 { + + // This code is added to remove screen clearer when returning from viewer. + if ( iMceListView ) + { + CAknLocalScreenClearer** localScreenClearer = NULL; + iMceListView->GetLocalScreenClearer( localScreenClearer ); + delete *localScreenClearer; + *localScreenClearer = NULL;// this will assign null to iLocalScreenClearer in messagelistview. + } if ( !iFeatureMgrEnabled ) { TRAP_IGNORE( FeatureManager::InitializeLibL() ); @@ -6651,13 +6649,24 @@ // ---------------------------------------------------- void CMceUi::ResetAndHide() { - SetCustomControl(1); // Disable bring-to-foreground on view activation - TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( \ - KMessagingCentreMainViewUid, \ - TUid::Uid(KMceHideInBackground), \ - KNullDesC8 ) ) ; + if (!MceViewActive( EMceMainViewActive )) + { + SetCustomControl(1); // Disable bring-to-foreground on view activation + TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( \ + KMessagingCentreMainViewUid, \ + TUid::Uid(KMceHideInBackground), \ + KNullDesC8 ) ) ; + } + else + { + SetCustomControl(0); // Enable bring-to-foreground on view activation + } HideInBackground(); } + +// ---------------------------------------------------- +// CMceUi::OpenMtmMailboxViewL +// ---------------------------------------------------- void CMceUi::OpenMtmMailboxViewL( const TMsvEntry& aEntry ) { CBaseMtmUi& mtmUi=iMtmStore->GetMtmUiAndSetContextLC( aEntry ); diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgavkon/muiu_domain/messageiterator/src/MuiuMessageIterator.cpp --- a/messagingappbase/msgavkon/muiu_domain/messageiterator/src/MuiuMessageIterator.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgavkon/muiu_domain/messageiterator/src/MuiuMessageIterator.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -422,17 +422,25 @@ CMsvEntrySelection* tempSel = iParentOfCurrent->ChildrenL(); CleanupStack::PushL( tempSel ); - // remove all except messages from the list. - for ( TInt loop = tempSel->Count() - 1; loop >= 0; loop-- ) + TMsvId parentId = iParentOfCurrent->EntryId(); + // there is no need to check sub folder entry , if + // parent ID is Inbox/Draft/sent/outbox + if(parentId != KMsvGlobalOutBoxIndexEntryId && + parentId != KMsvGlobalInBoxIndexEntryId && + parentId != KMsvDraftEntryId && + parentId != KMsvSentEntryId ) { - const TMsvEntry& childEntry = iParentOfCurrent->ChildDataL( ( *tempSel )[loop] ); - - if ( childEntry.iType.iUid != KUidMsvMessageEntryValue ) + // remove all except messages from the list. + for ( TInt loop = tempSel->Count() - 1; loop >= 0; loop-- ) { - tempSel->Delete( loop ); + const TMsvEntry& childEntry = iParentOfCurrent->ChildDataL( ( *tempSel )[loop] ); + + if ( childEntry.iType.iUid != KUidMsvMessageEntryValue ) + { + tempSel->Delete( loop ); + } } } - // Use the new child list delete iChildrenOfParent; CleanupStack::Pop( tempSel ); diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalPSKeys.h --- a/messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalPSKeys.h Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalPSKeys.h Thu Jul 15 18:34:37 2010 +0300 @@ -47,6 +47,10 @@ // Tells whether If one row list is populated or not, 1- list is populated, 0 - list population is in progress const TUint32 KMuiuOneRowListPopulated = 0x00000005; +// Message viewer fast open previous/next message. Message id of next\previous message +// needs to be opened from mce. +const TUint32 KMuiuKeyNextMsg = 0x00000006; + // The New PSK introduced from 5.0 const TUid KPSUidMsgEditor = {0x101F87FF}; diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgeditor/appui/WINSU.DEF --- a/messagingappbase/msgeditor/appui/WINSU.DEF Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgeditor/appui/WINSU.DEF Thu Jul 15 18:34:37 2010 +0300 @@ -102,4 +102,5 @@ ?HandleStatusPaneSizeChange@CMsgEditorAppUi@@UAEXXZ @ 101 NONAME ; void CMsgEditorAppUi::HandleStatusPaneSizeChange(void) ?HandleServerAppExit@CMsgViewAttachmentsDialog@@UAEXH@Z @ 102 NONAME ; void CMsgViewAttachmentsDialog::HandleServerAppExit(int) ?GetAliasL@CMsgCheckNames@@QAEXABVTDesC16@@AAVTDes16@@H@Z @ 103 NONAME ; void CMsgCheckNames::GetAliasL(class TDesC16 const &, class TDes16 &, int) + ?GetMessageIterator@CMsgNaviPaneControl@@QAEPAVCMessageIterator@@XZ @ 104 NONAME ; class CMessageIterator * CMsgNaviPaneControl::GetMessageIterator(void) diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp --- a/messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -205,6 +205,8 @@ cache.RegisterPluginL( &( iMsgEditorAppUiExtension->iSettingCachePlugin ) ); iStatusPaneRes = StatusPane()->CurrentLayoutResId(); + + iIterator = NULL; } // --------------------------------------------------------- @@ -236,7 +238,9 @@ delete iLock; delete iNaviDecorator; - delete iIterator; + // we are referring instance of nvaidecoratoir only + // no need to delete, alreday deleted in delete iNaviDecorator; + //delete iIterator; // delete files from our temp directory. if ( iFileMan ) @@ -334,18 +338,25 @@ } iMsgNaviDirection = aForward; + + // Check if next/previous message + __ASSERT_DEBUG( iIterator != NULL, Panic( ENullPointer1 ) ); + if ( aForward ) + { + iIterator->SetNextMessage(); + + } + else + { + iIterator->SetPreviousMessage(); + } + + RProperty::Set( KPSUidMuiu, KMuiuKeyNextMsg, + iIterator->CurrentMessage().Id() ); + #ifdef RD_MSG_FAST_PREV_NEXT // Check if next/previous message can be fast opened by viewer - __ASSERT_DEBUG( iIterator != NULL, Panic( ENullPointer1 ) ); - if ( aForward ) - { - iIterator->SetNextMessage(); - } - else - { - iIterator->SetPreviousMessage(); - } - + if ( CanFastOpenL( *iIterator) ) { // Load next/previous message @@ -376,6 +387,8 @@ } else if ( err != KErrNone ) { + // Reset the KMuiuKeyNextMsg to 0 + RProperty::Set( KPSUidMuiu, KMuiuKeyNextMsg,0 ); // Unknown error during quick launch. iCoeEnv->HandleError( err ); iExitMode = MApaEmbeddedDocObserver::ENoChanges; @@ -409,12 +422,10 @@ { CMsgEditorDocument* doc = Document(); - if ( iIterator == NULL ) - { - iIterator = CMessageIterator::NewL( doc->Session(), doc->Entry() ); - iIterator->SetMessageIteratorObserver( this ); - } - + //We should not create iterator here navi pane iterator + //will be refered in CMsgEditorAppUi + + __ASSERT_DEBUG( iIterator != NULL, Panic( ENullPointer1 ) ); // Next is ETrue if layout is EAknLayoutIdABRW, // EFalse if EAknLayoutIdELAF or EAknLayoutIdAPAC if ( AknLayoutUtils::LayoutMirrored() ) @@ -453,12 +464,9 @@ if ( iEikonEnv->StartedAsServerApp() ) { CMsgEditorDocument* doc = Document(); - - if ( iIterator == NULL ) - { - iIterator = CMessageIterator::NewL( doc->Session(), doc->Entry() ); - iIterator->SetMessageIteratorObserver( this ); - } + //We should not create iterator here, navi pane iterator + //will be refered in CMsgEditorAppUi + __ASSERT_DEBUG( iIterator != NULL, Panic( ENullPointer1 ) ); aCurrentIndex = iIterator->CurrentMessageIndex(); aMsgsInFolder = iIterator->MessagesInFolder(); @@ -1649,6 +1657,12 @@ CMsgEditorDocument* doc = Document(); naviPaneControl->SetNavigationIndicatorL( doc->Session(), doc->Entry() ); + // this function will always be called when viwer is launched + // always navi decorater will be created. + // refer navi decorator iterator instance here + iIterator = naviPaneControl->GetMessageIterator(); + iIterator->SetMessageIteratorObserver( this ); + iNaviDecorator->SetContainerWindowL( *naviContainer ); iNaviDecorator->MakeScrollButtonVisible( EFalse ); iNaviDecorator->SetComponentsToInheritVisibility( ETrue ); diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgeditor/appuisrc/MsgNaviPaneControl.cpp --- a/messagingappbase/msgeditor/appuisrc/MsgNaviPaneControl.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgeditor/appuisrc/MsgNaviPaneControl.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -91,6 +91,7 @@ iControlArray = CCoeControlArray::NewL( *this ); iControlArray->SetControlsOwnedExternally( EFalse ); iPriorityIndicator = EFalse; + iMessageIterator = NULL; UpdateVarientId(); SetComponentsToInheritVisibility( ETrue ); ActivateL(); @@ -165,12 +166,14 @@ EXPORT_C void CMsgNaviPaneControl::SetNavigationIndicatorL( CMsvSession& aSession, const TMsvEntry& aCurrentMessage ) { - delete iMessageIterator; - iMessageIterator = NULL; - - iMessageIterator = CMessageIterator::NewL( aSession, aCurrentMessage ); - iMessageIterator->SetMessageIteratorObserver( this ); - + if(!iMessageIterator) + { + // Iterator will be deleted once in the destructer only. + //deleting and creating it again is degrading the performance + + iMessageIterator = CMessageIterator::NewL( aSession, aCurrentMessage ); + iMessageIterator->SetMessageIteratorObserver( this ); + } UpdateNavigationIndicatorsL(); } @@ -767,4 +770,13 @@ } } } + +// ---------------------------------------------------------------------------- +// CMsgNaviPaneControl::GetNavigationIndicator +// ---------------------------------------------------------------------------- +// +EXPORT_C CMessageIterator* CMsgNaviPaneControl::GetMessageIterator() + { + return iMessageIterator; + } // End of File diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgeditor/eabi/msgeditorappuiU.def --- a/messagingappbase/msgeditor/eabi/msgeditorappuiU.def Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgeditor/eabi/msgeditorappuiU.def Thu Jul 15 18:34:37 2010 +0300 @@ -165,4 +165,5 @@ _ZN25CMsgViewAttachmentsDialog19HandleServerAppExitEi @ 164 NONAME _ZThn180_N25CMsgViewAttachmentsDialog19HandleServerAppExitEi @ 165 NONAME ; ## _ZN14CMsgCheckNames9GetAliasLERK7TDesC16R6TDes16i @ 166 NONAME + _ZN19CMsgNaviPaneControl18GetMessageIteratorEv @ 167 NONAME diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgeditor/viewsrc/MsgAddressControlEditor.cpp --- a/messagingappbase/msgeditor/viewsrc/MsgAddressControlEditor.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgeditor/viewsrc/MsgAddressControlEditor.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -1672,6 +1672,15 @@ aKeyEvent.iCode == EKeyDevice3 ) && iValidHighlightable ) { + if ( aKeyEvent.iCode == EKeyDevice3 + && iFindItemEventReceived ) + { + // Find item was activated by touch, + // no need to restore highlight + iFindItemEventReceived = EFalse; + return EKeyWasNotConsumed; + } + if ( !SelectionLength() ) { // Enable highlight if hw keys used @@ -1743,21 +1752,17 @@ if ( currentField && iPreviousField == currentField ) { - // We will send new EMsgFindItemEvent so that we can separate - // single click item activation and old key based activation. - // This is just quick fix for doing it, other implementations should - // be considered(e.g. storing state in editor or using some flags). - // This is done because in AppUI::HandleKeyEvent we must separate - // activation methods for enabling highlight when using keys. + // Addressfield text was clicked, we will send simulated key event for + // opening context sensitive menu in AppUI::HandleKeyEvent TKeyEvent event; - event.iCode = EMsgFindItemKeyEvent; - event.iScanCode = EMsgFindItemKeyEvent; + event.iCode = EKeyDevice3; + event.iScanCode = EKeyDevice3; event.iModifiers = 0; event.iRepeats = 0; - iCoeEnv->WsSession().SimulateKeyEvent( event ); - forwardRequest = EFalse; + iFindItemEventReceived = ETrue; + iCoeEnv->WsSession().SimulateKeyEvent( event ); } if ( SelectionLength() ) diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgeditor/viewsrc/MsgBodyControlEditor.cpp --- a/messagingappbase/msgeditor/viewsrc/MsgBodyControlEditor.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgeditor/viewsrc/MsgBodyControlEditor.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -256,7 +256,17 @@ { switch ( aKeyEvent.iCode ) { - case EKeyDevice3: + case EKeyDevice3: + { + if ( iFindItemEventReceived ) + { + // Find item was activated by touch, + // no need to restore highlight + iFindItemEventReceived = EFalse; + return EKeyWasNotConsumed; + } + // fall through + } case EKeyEnter: { // Restore highlight @@ -308,20 +318,17 @@ MAknItemFinderObserver::TEventFlag aEvent, TUint aFlags) { - // We will send new EMsgFindItemEvent so that we can separate - // single click item activation and old key based activation. - // This is just quick fix for doing it, other implementations should - // be considered(e.g. storing state in editor or using some flags). - // This is done because in AppUI::HandleKeyEvent we must separate - // activation methods for enabling highlight when using keys. + // Body text find item was clicked, we will send simulated key event for + // opening context sensitive menu in AppUI::HandleKeyEvent if ( MAknItemFinderObserver::EPointerEvent == aEvent ) { TKeyEvent event; - event.iCode = EMsgFindItemKeyEvent; - event.iScanCode = EMsgFindItemKeyEvent; + event.iCode = EKeyDevice3; + event.iScanCode = EKeyDevice3; event.iModifiers = 0; event.iRepeats = 0; + iFindItemEventReceived = ETrue; iCoeEnv->WsSession().SimulateKeyEvent( event ); } } diff -r 1367103c24e2 -r 696bfeff199e messagingappbase/msgeditor/viewsrc/MsgExpandableControlEditor.cpp --- a/messagingappbase/msgeditor/viewsrc/MsgExpandableControlEditor.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/messagingappbase/msgeditor/viewsrc/MsgExpandableControlEditor.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -101,7 +101,8 @@ CEikRichTextEditor( TGulBorder::ENone ), iParentControl( aParent ), iFlags( aFlags ), - iBaseControlObserver( aBaseControlObserver ) + iBaseControlObserver( aBaseControlObserver ), + iFindItemEventReceived( EFalse ) { } diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/audiomsg/inc/audiomessageappui.h --- a/mobilemessaging/audiomsg/inc/audiomessageappui.h Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/audiomsg/inc/audiomessageappui.h Thu Jul 15 18:34:37 2010 +0300 @@ -867,6 +867,16 @@ #endif + /** + * Check if find item highlight needs to be enabled on key event. + * + * @param aKeyEvent key event + * @param aType event type + * @return ETrue if highlight was enabled, + * EFalse otherwise + */ + TBool CheckFindItemHighlightL( const TKeyEvent& aKeyEvent, + TEventCode aType ); private: // Data /** diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/audiomsg/src/audiomessageappui.cpp --- a/mobilemessaging/audiomsg/src/audiomessageappui.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/audiomsg/src/audiomessageappui.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -998,7 +998,13 @@ #endif break; case EKeyOK: // Selection key: Show context menus OR play/record clip - { + { + // Check if find item highlight needs to be enabled + if ( CheckFindItemHighlightL( aKeyEvent, aType ) ) + { + return EKeyWasConsumed; + } + if ( Document()->GetAppMode() == EAmsEditor ) { HandleCommandL( EAmsSoftkeyAdd ); @@ -1082,6 +1088,11 @@ break; case EKeyEnter: { + // Check if find item highlight needs to be enabled + if ( CheckFindItemHighlightL( aKeyEvent, aType ) ) + { + return EKeyWasConsumed; + } if (DoEnterKeyL() ) { return EKeyWasConsumed; @@ -1258,7 +1269,23 @@ { const TPtrC details = iMtm->Entry().Entry().iDetails; - if( (FocusedControlId( ) == EMsgComponentIdFrom) && ( ( iMtm->Sender( ) ).Length() ) ) + TInt focusedControl = FocusedControlId(); + TBool senderHighlighted = EFalse; + + if ( focusedControl == EMsgComponentIdFrom ) + { + CMsgAddressControl* address = static_cast( + iView->ControlById( EMsgComponentIdFrom ) ); + + if ( address && address->Editor().SelectionLength() + == address->Editor().TextLength() ) + { + senderHighlighted = ETrue; + } + } + + if( ( focusedControl == EMsgComponentIdFrom ) && ( ( iMtm->Sender( ) ).Length() ) + && senderHighlighted ) { iFindItemMenu->SetSenderHighlightStatus( ETrue ); iFindItemMenu->SetSenderDisplayText( TMmsGenUtils::PureAddress( iMtm->Sender( ) ) ); @@ -1271,7 +1298,8 @@ 0, aMenuPane, EFindItemMenuPlaceHolder, - TMmsGenUtils::PureAddress( iMtm->Sender() ), + senderHighlighted ? + TMmsGenUtils::PureAddress( iMtm->Sender( ) ) : KNullDesC(), ( details.Length() == 0 ), EFalse ); //in sent folder reply is dimmed @@ -1320,7 +1348,7 @@ aMenuPane, EFindItemContextMenuPlaceHolder, TMmsGenUtils::PureAddress( iMtm->Sender() ), - ( details.Length() != 0 ), //"Is sender known" + ( details.Length() == 0 ), //"Is sender known" ETrue ); // no items dimmed for now if ( iMtm->Sender().Length() <= 0 ) @@ -4690,3 +4718,46 @@ return result; } + +// --------------------------------------------------------- +// CAudioMessageAppUi::CheckFindItemHighlightL +// --------------------------------------------------------- +// +TBool CAudioMessageAppUi::CheckFindItemHighlightL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + TKeyResponse keyResp = EKeyWasNotConsumed; + CMsgExpandableControl* ctrl = NULL; + TBool checkHighlight = EFalse; + + if( iView->FocusedControl() ) + { + ctrl = static_cast( iView->FocusedControl() ); + if ( ctrl ) + { + if ( ctrl->ControlType() == EMsgAddressControl + && !ctrl->Editor().SelectionLength() ) + { + checkHighlight = ETrue; + } + else if ( ctrl->ControlType() == EMsgBodyControl ) + { + CItemFinder* itemFinder = iView->ItemFinder(); + if ( FocusedControlId() == EMsgComponentIdBody && itemFinder + && !itemFinder->CurrentSelection().Length() ) + { + checkHighlight = ETrue; + } + } + } + } + + if ( ctrl && checkHighlight ) + { + // Check if highlight needs to be restored to editor, + // address/body editor offerkeyevent will handle it + keyResp = ctrl->Editor().OfferKeyEventL( aKeyEvent, aType ); + } + + return ( keyResp == EKeyWasConsumed ? ETrue : EFalse ); + } diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/mmsui/notviewersrc/NotViewerAppUi.cpp --- a/mobilemessaging/mmsui/notviewersrc/NotViewerAppUi.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/mmsui/notviewersrc/NotViewerAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -614,8 +614,24 @@ if ( iFlags & ENotViewerIsNotification ) { // Notification mode if ( iView ) - { - if( (FocusedControlId( ) == EMsgComponentIdFrom) && ( ( iMtm->Sender( ) ).Length() ) ) + { + TInt focusedControl = FocusedControlId(); + TBool senderHighlighted = EFalse; + + if ( focusedControl == EMsgComponentIdFrom ) + { + CMsgAddressControl* address = static_cast( + iView->ControlById( EMsgComponentIdFrom ) ); + + if ( address && address->Editor().SelectionLength() + == address->Editor().TextLength() ) + { + senderHighlighted = ETrue; + } + } + + if( ( focusedControl == EMsgComponentIdFrom ) && ( ( iMtm->Sender( ) ).Length() ) + && senderHighlighted ) { iFindItemMenu->SetSenderHighlightStatus( ETrue ); iFindItemMenu->SetSenderDisplayText( TMmsGenUtils::PureAddress( iMtm->Sender( ) ) ); @@ -625,10 +641,13 @@ iFindItemMenu->SetSenderHighlightStatus( EFalse ); } iFindItemMenu->AddItemFindMenuL( - ( FocusedControlId() == EMsgComponentIdBody ) ? iView->ItemFinder() : 0, + ( iView->ItemFinder() && + iView->ItemFinder()->CurrentSelection().Length() ) + ? iView->ItemFinder() : 0, aMenuPane, EFindItemMenuPlaceHolder, - iMtm->Sender(), + senderHighlighted ? + iMtm->Sender( ) : KNullDesC(), iAlias && !iRemoteAlias ? ETrue : EFalse, //"Is sender known" EFalse ); } @@ -867,6 +886,42 @@ case EKeyDevice3: //Selection key case EKeyEnter: //Enter Key { + CMsgExpandableControl* ctrl = NULL; + TBool checkHighlight = EFalse; + + if( iView->FocusedControl() ) + { + ctrl = static_cast( iView->FocusedControl() ); + if ( ctrl ) + { + if ( ctrl->ControlType() == EMsgAddressControl + && !ctrl->Editor().SelectionLength() ) + { + checkHighlight = ETrue; + } + else if ( ctrl->ControlType() == EMsgBodyControl ) + { + CItemFinder* itemFinder = iView->ItemFinder(); + if ( FocusedControlId() == EMsgComponentIdBody && itemFinder + && !itemFinder->CurrentSelection().Length() ) + { + checkHighlight = ETrue; + } + } + } + } + if ( ctrl && checkHighlight ) + { + // Check if highlight needs to be restored to editor, + // address/body editor offerkeyevent will handle it + if ( ctrl->Editor().OfferKeyEventL( aKeyEvent, aType ) + == EKeyWasConsumed ) + { + // Highlight was restored, just return, no cs menu needed + return EKeyWasConsumed; + } + } + if ( DoSelectionKeyL( ) ) { return EKeyWasConsumed; diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp --- a/mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -1177,7 +1177,7 @@ if ( !IsOwnMessage( ) ) { - if( ( FocusedControlId( ) == EMsgComponentIdFrom) && ( ( iMtm->Sender( ) ).Length() ) + if( ( focusedControl == EMsgComponentIdFrom ) && ( ( iMtm->Sender( ) ).Length() ) && senderHighlighted ) { iFindItemMenu->SetSenderHighlightStatus( ETrue ); @@ -1190,8 +1190,9 @@ } iFindItemMenu->AddItemFindMenuL( - ( iView->ItemFinder() && iView->ItemFinder()->CurrentSelection().Length() ) - ? iView->ItemFinder( ) : 0, + ( iView->ItemFinder() && + iView->ItemFinder()->CurrentSelection().Length() ) + ? iView->ItemFinder() : 0, aMenuPane, EFindItemMenuPlaceHolder, senderHighlighted ? @@ -1625,38 +1626,39 @@ case EKeyDevice3: //Selection key case EKeyEnter: //Enter Key { - if( iView->FocusedControl()->ControlType() == EMsgAddressControl ) + CMsgExpandableControl* ctrl = NULL; + TBool checkHighlight = EFalse; + + if( iView->FocusedControl() ) { - CMsgAddressControl* address = static_cast( - iView->FocusedControl() ); - if ( address && !address->Editor().SelectionLength() ) + ctrl = static_cast( iView->FocusedControl() ); + if ( ctrl->ControlType() == EMsgAddressControl + && !ctrl->Editor().SelectionLength() ) { - // restore highlight to address field - return address->Editor().OfferKeyEventL( aKeyEvent, aType ); - } - } - else if ( iView->FocusedControl()->ControlType() == EMsgBodyControl ) - { - CItemFinder* itemFinder = iView->ItemFinder(); - if ( FocusedControlId() == EMsgComponentIdBody - && itemFinder ) - { - if ( !itemFinder->CurrentSelection().Length() ) - { - CMsgBodyControl* body = static_cast( - iView->FocusedControl() ); - if ( body ) - { - // restore highlight to current itemfinder item - return body->Editor().OfferKeyEventL( aKeyEvent, aType ); - } + checkHighlight = ETrue; + } + else if ( ctrl->ControlType() == EMsgBodyControl ) + { + CItemFinder* itemFinder = iView->ItemFinder(); + if ( FocusedControlId() == EMsgComponentIdBody && itemFinder + && !itemFinder->CurrentSelection().Length() ) + { + checkHighlight = ETrue; } } } - // fall through - } - case EMsgFindItemKeyEvent: - { + if ( ctrl && checkHighlight ) + { + // Check if highlight needs to be restored to editor, + // address/body editor offerkeyevent will handle it + if ( ctrl->Editor().OfferKeyEventL( aKeyEvent, aType ) + == EKeyWasConsumed ) + { + // Highlight was restored, just return, no cs menu needed + return EKeyWasConsumed; + } + } + TInt focusedControl = FocusedControlId( ); CMsgMediaControl* control = MediaControlById(focusedControl); if (control) diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/smilui/playersrc/SmilPlayerIndicatorController.cpp --- a/mobilemessaging/smilui/playersrc/SmilPlayerIndicatorController.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/smilui/playersrc/SmilPlayerIndicatorController.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -599,9 +599,18 @@ { if ( iVolumeController && iVolumeController->Rect().Contains( aPointerEvent.iPosition ) ) - { - iVolumeController->HandlePointerEventL( aPointerEvent ); - } + { + if (iPlayIndicator && !(iPlayIndicator->Rect().Contains( aPointerEvent.iPosition) ) || + (iPauseIndicator && !iPauseIndicator->Rect().Contains( aPointerEvent.iPosition ))) + { + iVolumeController->HandlePointerEventL( aPointerEvent ); + } + else if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) + { + iPresController->PlayPauseTappedL(); + } + + } else if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) { iPresController->PlayPauseTappedL(); diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/smsmtm/servermtm/group/SMSS.rss --- a/mobilemessaging/smsmtm/servermtm/group/SMSS.rss Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/smsmtm/servermtm/group/SMSS.rss Thu Jul 15 18:34:37 2010 +0300 @@ -64,7 +64,12 @@ //SMS Errors SEND_ERROR { error = -4814; }, // KErrGsmSMSOperationNotAllowed - SEND_ERROR { error = -5252; } // KPKIErrKeyStoreEmpty + SEND_ERROR { error = -5252; }, // KPKIErrKeyStoreEmpty + SEND_ERROR { error = -4533; }, // KErrGsmSMSShortMessageTransferRejected + SEND_ERROR { error = -4540; }, // KErrGsmSMSUnidentifiedSubscriber + SEND_ERROR { error = -4542; }, // KErrGsmSMSUnknownSubscriber + SEND_ERROR { error = -4550; }, // KErrGsmSMSNetworkOutOfOrder + SEND_ERROR { error = -4608; } // KErrGsmSMSInvalidMandatoryInformation }; }, SEND_ERROR_ACTION diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/smsmtm/servermtm/src/SMSSOUTB.CPP --- a/mobilemessaging/smsmtm/servermtm/src/SMSSOUTB.CPP Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/smsmtm/servermtm/src/SMSSOUTB.CPP Thu Jul 15 18:34:37 2010 +0300 @@ -23,7 +23,6 @@ #include #include #include -#include #include "SMSSendSession.h" #include "SMSSPAN.H" @@ -211,15 +210,8 @@ { if (iCurrentMessage) { - if( (iProgress.iError == KErrGsmSMSShortMessageTransferRejected) || (iProgress.iError == KErrGsmSMSInvalidMandatoryInformation) || (iProgress.iError == KErrGsmSMSUnidentifiedSubscriber) || - (iProgress.iError == KErrGsmSMSUnknownSubscriber) || (iProgress.iError == KErrGsmSMSNetworkOutOfOrder) ) - { - DoComplete(iProgress.iError); - } - else - { - ReScheduleFailedMessageL(); - } + SMSSLOG(FLogFormat(_L8("CSmsOutboxSend::DoRunL(), error for ReSchedule %d"), iProgress.iError)); + ReScheduleFailedMessageL(); } else { diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp --- a/mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -36,6 +36,7 @@ #include // CMsgBioControl #include // CGmsWrapper #include +#include // messaging #include // CSmsHeader #include // CSmsClientMtm @@ -979,7 +980,8 @@ CMsgAddressControl* address = static_cast( iView->ControlById( EMsgComponentIdFrom ) ); - if ( address && address->Editor().SelectionLength() ) + if ( address && address->Editor().SelectionLength() + == address->Editor().TextLength() ) { senderHighlighted = ETrue; } @@ -1105,7 +1107,8 @@ CMsgAddressControl* address = static_cast( iView->ControlById( EMsgComponentIdFrom ) ); - if ( address && address->Editor().SelectionLength() ) + if ( address && address->Editor().SelectionLength() + == address->Editor().TextLength() ) { senderHighlighted = ETrue; } @@ -1614,39 +1617,40 @@ } case EKeyDevice3: case EKeyEnter: - { - if( iView->FocusedControl()->ControlType() == EMsgAddressControl ) + { + CMsgExpandableControl* ctrl = NULL; + TBool checkHighlight = EFalse; + + if( iView->FocusedControl() ) { - CMsgAddressControl* address = static_cast( - iView->FocusedControl() ); - if ( address && !address->Editor().SelectionLength() ) + ctrl = static_cast( iView->FocusedControl() ); + if ( ctrl->ControlType() == EMsgAddressControl + && !ctrl->Editor().SelectionLength() ) { - // restore highlight to address field - return address->Editor().OfferKeyEventL( aKeyEvent, aType ); - } - } - else if ( iView->FocusedControl()->ControlType() == EMsgBodyControl ) - { - CItemFinder* itemFinder = iView->ItemFinder(); - if ( FocusedControlId() == EMsgComponentIdBody - && itemFinder ) - { - if ( !itemFinder->CurrentSelection().Length() ) - { - CMsgBodyControl* body = static_cast( - iView->FocusedControl() ); - if ( body ) - { - // restore highlight to current itemfinder item - return body->Editor().OfferKeyEventL( aKeyEvent, aType ); - } + checkHighlight = ETrue; + } + else if ( ctrl->ControlType() == EMsgBodyControl ) + { + CItemFinder* itemFinder = iView->ItemFinder(); + if ( FocusedControlId() == EMsgComponentIdBody && itemFinder + && !itemFinder->CurrentSelection().Length() ) + { + checkHighlight = ETrue; } } } - // fall through - } - case EMsgFindItemKeyEvent: - { + if ( ctrl && checkHighlight ) + { + // Check if highlight needs to be restored to editor, + // address/body editor offerkeyevent will handle it + if ( ctrl->Editor().OfferKeyEventL( aKeyEvent, aType ) + == EKeyWasConsumed ) + { + // Highlight was restored, just return, no cs menu needed + return EKeyWasConsumed; + } + } + // Selection-key checking (Context sensitive menu) // (with Class 0 just show the menu) if ( !iClass0CBA ) diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/inc/UniEditorAppUi.h --- a/mobilemessaging/unieditor/application/inc/UniEditorAppUi.h Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/inc/UniEditorAppUi.h Thu Jul 15 18:34:37 2010 +0300 @@ -1382,6 +1382,9 @@ * Own. */ CAknStylusPopUpMenu* iEmbeddedObjectStylusPopup; + // sendui+jepg optimization changes + TBool iOptimizedFlow; + TBool iSingleJpegImageProcessing; }; #include "UniEditorAppUi.inl" diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/inc/UniEditorLaunchOperation.h --- a/mobilemessaging/unieditor/application/inc/UniEditorLaunchOperation.h Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/inc/UniEditorLaunchOperation.h Thu Jul 15 18:34:37 2010 +0300 @@ -94,6 +94,17 @@ * Detach slide loader object */ inline CUniSlideLoader* DetachSlideLoader(); + + /** + * get header object + */ + inline CUniEditorHeader* GetHeader(); + + /** + * get slide loader object + */ + inline CUniSlideLoader* GetSlideLoader(); + /** * Return parse result @@ -104,6 +115,11 @@ * From MUniDataModelObserver */ void RestoreReady( TInt aParseResult, TInt aError ); + + /** + * check Is optimized flow + */ + TBool IsOptimizedFlagSet(); protected: @@ -219,6 +235,8 @@ TBool iSmilEditorSupported; // count of failed image operations TInt iParseResultTemp; + // sendui+jepg optimization changes + TBool iOptimizedFlow; }; diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/inc/UniEditorLaunchOperation.inl --- a/mobilemessaging/unieditor/application/inc/UniEditorLaunchOperation.inl Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/inc/UniEditorLaunchOperation.inl Thu Jul 15 18:34:37 2010 +0300 @@ -39,4 +39,22 @@ return slideLoader; } +// --------------------------------------------------------- +// CUniEditorLaunchOperation::GetHeader +// --------------------------------------------------------- +// +inline CUniEditorHeader* CUniEditorLaunchOperation::GetHeader() + { + return iHeader; + } + +// --------------------------------------------------------- +// CUniEditorLaunchOperation::GetSlideLoader +// --------------------------------------------------------- +// +inline CUniSlideLoader* CUniEditorLaunchOperation::GetSlideLoader() + { + return iSlideLoader; + } + // End of file diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/inc/UniEditorOperation.h --- a/mobilemessaging/unieditor/application/inc/UniEditorOperation.h Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/inc/UniEditorOperation.h Thu Jul 15 18:34:37 2010 +0300 @@ -54,6 +54,7 @@ enum TUniEditorOperationEvent { EUniEditorOperationProcessing, + EUniEditorOperationPartialComplete, EUniEditorOperationComplete, EUniEditorOperationError, // Cancel is called for active operation diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/inc/UniEditorProcessImageOperation.h --- a/mobilemessaging/unieditor/application/inc/UniEditorProcessImageOperation.h Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/inc/UniEditorProcessImageOperation.h Thu Jul 15 18:34:37 2010 +0300 @@ -85,6 +85,11 @@ * Detaches attachment id. */ void DetachAttachmentId( TMsvAttachmentId& aAttachmentId ); + + /** + * Set Optimized Flow flag + */ + void SetOptimizedFlow(TBool aOptimizedFlow); protected: @@ -205,9 +210,10 @@ TInt iProcessMethod; TSize iScaleSize; - TSize iScaleSizeResult; + // TSize iScaleSizeResult; TDataType iTargetType; TBool iExactImageScaling; + TBool iOptimizedFlow; }; #endif //__UNIEDITORPROCESSIMAGEOPERATION_H diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/inc/UniEditorSendUiOperation.h --- a/mobilemessaging/unieditor/application/inc/UniEditorSendUiOperation.h Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/inc/UniEditorSendUiOperation.h Thu Jul 15 18:34:37 2010 +0300 @@ -73,6 +73,11 @@ * Starts send ui operation */ void Start(); + + /** + * check Is optimized flow + */ + TBool IsOptimizedFlagSet(); protected: @@ -165,6 +170,8 @@ CUniObject* iPreparedObject; TBool iDeleteAll; CUniEditorProcessTextOperation* iTextOperation; + // sendui+jepg optimization changes + TBool iOptimizedFlow; }; diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp --- a/mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -266,7 +266,9 @@ iOriginalSlide( -1 ), iNextFocus( EMsgComponentIdNull ), iEditorFlags( EShowInfoPopups ), - iMskResId( R_UNIEDITOR_OPTIONS_CLOSE ) + iMskResId( R_UNIEDITOR_OPTIONS_CLOSE ), + iOptimizedFlow(EFalse), + iSingleJpegImageProcessing(EFalse) { } @@ -461,6 +463,22 @@ { iEditorFlags |= EEditorExiting; + //sendui+jepg optimization changes + if(iLaunchOperation) + { + // check Is iLaunchOperation still attached to + // iSlideLoader / iHeader + // Set the CUniEditorAppUi + // instance to NULL, to avoid crash. + if(iLaunchOperation->GetHeader()) + { + iHeader = NULL; + } + if(iLaunchOperation->GetSlideLoader()) + { + iSlideLoader = NULL; + } + } if ( iView ) { // To prevent focus changes caused by input blocker deletion & toolbar extension @@ -665,10 +683,31 @@ // void CUniEditorAppUi::FinalizeLaunchL() { + // In all normal cases other then Sendui+Jepeg + // iOptimizedFlow will be false and flow should be + // same as the normal launch + if(iOptimizedFlow) + { + //if iOptimizedFlow is True, it means + //sendui+Jepg and this is partial complete call + iSingleJpegImageProcessing = ETrue; + } + iFinalizeLaunchL = ETrue; iSmilModel = &Document()->DataModel()->SmilModel(); - iHeader = iLaunchOperation->DetachHeader(); - iSlideLoader = iLaunchOperation->DetachSlideLoader(); + + if(!iOptimizedFlow) + { + //detach the iHeader and iSlideLoader + iHeader = iLaunchOperation->DetachHeader(); + iSlideLoader = iLaunchOperation->DetachSlideLoader(); + } + else + { + // get reference to complete partial lauch operation + iHeader = iLaunchOperation->GetHeader(); + iSlideLoader = iLaunchOperation->GetSlideLoader(); + } SetMessageTypeLockingL(); @@ -774,12 +813,41 @@ MenuBar()->SetMenuType( CEikMenuBar::EMenuOptions ); UpdateToolbarL(); - - iEditorFlags |= ELaunchSuccessful; - - iView->ExecuteL( ClientRect(), focusedControlId ); + + // partial launch need to call execute to make + //the editor visible + if(iOptimizedFlow) + { + iView->ExecuteL( ClientRect(), focusedControlId ); + } + else// not optmized Flow, common flow + { + // partial launch, dont set the flag + iEditorFlags |= ELaunchSuccessful; + + // in case of sendui+jepg , again finalize launch will be called + //after image processing, no need to call iView->ExecuteL + // slide will be loaded already by slide loader. + if(!iSingleJpegImageProcessing) + { + //normal flow + iView->ExecuteL( ClientRect(), focusedControlId ); + } + + //after the lauch complete for sendui+jepg + //rest it. + iSingleJpegImageProcessing = EFalse; + } + delete iScreenClearer; iScreenClearer = NULL; + + // show note inserting + if(iOptimizedFlow) + { + ShowWaitNoteL( R_QTN_UNI_WAIT_INSERTING ); + } + } @@ -6419,6 +6487,9 @@ if ( iEditorFlags & EEditorExiting ) { // Do not handle any event if we are exiting from editor. + // rest values. + iOptimizedFlow = EFalse; + iSingleJpegImageProcessing = EFalse; return; } @@ -6426,9 +6497,20 @@ aEvent == EUniEditorOperationError || aEvent == EUniEditorOperationCancel ) { - DeactivateInputBlocker(); - iEditorFlags &= ~EMsgEditInProgress; - + // set iOptimizedFlow + if( aOperation == EUniEditorOperationLaunch) + { + if(iLaunchOperation) + { + iOptimizedFlow = iLaunchOperation->IsOptimizedFlagSet(); + } + } + // sendui+jepg-> this required after image processing + if(!iOptimizedFlow) + { + DeactivateInputBlocker(); + iEditorFlags &= ~EMsgEditInProgress; + } if ( aEvent == EUniEditorOperationCancel && aOperation != EUniEditorOperationSend ) { @@ -6447,6 +6529,15 @@ TRAPD( error, DoEditorOperationEventL( aOperation, aEvent ) ); if ( error != KErrNone ) { + // error handling + if(iOptimizedFlow) + { + DeactivateInputBlocker(); + iEditorFlags &= ~EMsgEditInProgress; + } + iOptimizedFlow = EFalse; + iSingleJpegImageProcessing = EFalse; + // Handle operation handling error. if ( error == KLeaveExit ) { @@ -6463,6 +6554,10 @@ } } } + //sendui+jepg-> after first call to finallizelauch,rest + // it, so that next call will cover the code finallizelaunch + //as happened for other launch cases. + iOptimizedFlow = EFalse; } // --------------------------------------------------------- @@ -6615,11 +6710,19 @@ // void CUniEditorAppUi::DoLaunchCompleteL() { - // Does no harm to call this even if no wait note is set. - RemoveWaitNote(); - + //sendui+jepg -> this required after image processing + if(!iOptimizedFlow) + { + // Does no harm to call this even if no wait note is set. + RemoveWaitNote(); + } + TBool shutDown( EFalse ); - ShowLaunchNotesL( shutDown ); + // sendui+jepg-> this required after image processing + if(!iOptimizedFlow) + { + ShowLaunchNotesL( shutDown ); + } if ( shutDown ) { diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/src/UniEditorLaunchOperation.cpp --- a/mobilemessaging/unieditor/application/src/UniEditorLaunchOperation.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/src/UniEditorLaunchOperation.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -115,7 +115,8 @@ CUniEditorOperation( aOperationObserver, aDocument, aFs, EUniEditorOperationLaunch ), iControlObserver( aControlObserver ), iView( aView ), - iAppUi( aAppUi ) + iAppUi( aAppUi ), + iOptimizedFlow(EFalse) { } @@ -401,9 +402,13 @@ // void CUniEditorLaunchOperation::DoPrepareHeaderL() { - // Header is always drawn and populated - iHeader = CUniEditorHeader::NewL( iDocument.Mtm(), iDocument, iView, iFs ); - CompleteSelf( KErrNone ); + if(!iHeader) + { + // Header is always drawn and populated + iHeader = CUniEditorHeader::NewL( iDocument.Mtm(), iDocument, iView, iFs ); + } + if(!iOptimizedFlow) + CompleteSelf( KErrNone ); } // --------------------------------------------------------- @@ -412,21 +417,28 @@ // void CUniEditorLaunchOperation::DoPrepareBodyL() { - iSlideLoader = CUniSlideLoader::NewL( - iControlObserver, - *iDocument.DataModel(), - iView, - EUniControlEditorMode ); - + if(!iSlideLoader) + { + iSlideLoader = CUniSlideLoader::NewL( + iControlObserver, + *iDocument.DataModel(), + iView, + EUniControlEditorMode ); + } + if ( iDocument.DataModel()->SmilType() == EMmsSmil ) { - if ( !iDocument.DataModel()->SmilModel().SlideCount() ) + if(!iOptimizedFlow) { - iDocument.DataModel()->SmilModel().AddSlideL(); + if ( !iDocument.DataModel()->SmilModel().SlideCount() ) + { + iDocument.DataModel()->SmilModel().AddSlideL(); + } + + iSlideLoader->LoadSlideL( *this, 0 ); + + SetPending(); } - - iSlideLoader->LoadSlideL( *this, 0 ); - SetPending(); } else { @@ -608,10 +620,25 @@ // --------------------------------------------------------- // void CUniEditorLaunchOperation::HandleOperationEvent( TUniEditorOperationType aOperation, - TUniEditorOperationEvent /*aEvent*/ ) + TUniEditorOperationEvent aEvent ) { if ( aOperation == EUniEditorOperationSendUi ) { + iOptimizedFlow = EFalse; + if(aEvent == EUniEditorOperationPartialComplete) + { + iOptimizedFlow = iSendUiOperation->IsOptimizedFlagSet(); + if(iOptimizedFlow) + { + DoPrepareHeaderL(); + DoPrepareBodyL(); + iObserver.EditorOperationEvent( + EUniEditorOperationLaunch, + EUniEditorOperationComplete ); + iOptimizedFlow = EFalse; + } + return; + } CArrayFixFlat* errors = iSendUiOperation->GetErrors(); for ( TInt i = 0; i < errors->Count(); i++ ) { @@ -654,6 +681,14 @@ return parseResult; } - + +// --------------------------------------------------------- +// CUniEditorLaunchOperation::IsOptimizedFlagSet +// --------------------------------------------------------- +// +TBool CUniEditorLaunchOperation::IsOptimizedFlagSet() + { + return iOptimizedFlow; + } // EOF diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/src/UniEditorProcessImageOperation.cpp --- a/mobilemessaging/unieditor/application/src/UniEditorProcessImageOperation.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/src/UniEditorProcessImageOperation.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -98,7 +98,8 @@ CUniEditorDocument& aDocument, RFs& aFs ) : CUniEditorOperation( aObserver, aDocument, aFs, EUniEditorOperationProcessImage ), - iNewAttaId( KMsvNullIndexEntryId ) + iNewAttaId( KMsvNullIndexEntryId ), + iOptimizedFlow(EFalse) { } @@ -258,6 +259,13 @@ // void CUniEditorProcessImageOperation::DoStartProcessL() { + + if(iOptimizedFlow) + { + iObserver.EditorOperationEvent( EUniEditorOperationProcessImage, + EUniEditorOperationPartialComplete ); + iOptimizedFlow = EFalse; + } CreateEmptyAttachmentL(); if ( !iImageProcessor ) @@ -646,5 +654,13 @@ iNewImageInfo = NULL; return tempInfo; } - + +// --------------------------------------------------------- +// CUniEditorProcessImageOperation::SetOptimizedFlow +// --------------------------------------------------------- +// +void CUniEditorProcessImageOperation::SetOptimizedFlow(TBool aOptimizedFlow) + { + iOptimizedFlow = aOptimizedFlow; + } // End of file diff -r 1367103c24e2 -r 696bfeff199e mobilemessaging/unieditor/application/src/UniEditorSendUiOperation.cpp --- a/mobilemessaging/unieditor/application/src/UniEditorSendUiOperation.cpp Mon Jun 21 15:36:19 2010 +0300 +++ b/mobilemessaging/unieditor/application/src/UniEditorSendUiOperation.cpp Thu Jul 15 18:34:37 2010 +0300 @@ -134,6 +134,7 @@ BaseConstructL(); iDeleteAllLimit = ( iDocument.MaxMessageSize() * KSendAsDeleteAllPercentage ) / 100; + iOptimizedFlow = EFalse; } // --------------------------------------------------------- @@ -222,6 +223,21 @@ // void CUniEditorSendUiOperation::DoSendUiCheckL() { + // check is it, one embedded object with jpeg image + // captured from camera\ seleted from photo\ filemanager + TInt objectCount =iDocument.DataModel()->ObjectList().Count() ; + TInt slideCount =iDocument.DataModel()->SmilModel().SlideCount() ; + if ( (objectCount == 1)&&(slideCount == 1)&& + (iDocument.DataModel()->AttachmentList().Count()== 0)) + { + CUniObject* obj = + iDocument.DataModel()->SmilModel().GetObjectByIndex( slideCount-1, objectCount-1 ); + if(obj->MediaInfo()->MimeType().CompareF( KMsgMimeImageJpeg )== 0) + { + iOptimizedFlow = ETrue; + } + } + if ( iDocument.DataModel()->ObjectList().Count() || iDocument.DataModel()->AttachmentList().Count() ) { @@ -461,6 +477,7 @@ iImageOperation = CUniEditorProcessImageOperation::NewL( *this, iDocument, iFs ); } + iImageOperation->SetOptimizedFlow(iOptimizedFlow); // Processes if needed: iImageOperation->Process( static_cast( aObject->MediaInfo() ), aObject->AttachmentId(), @@ -564,7 +581,7 @@ // --------------------------------------------------------- // void CUniEditorSendUiOperation::HandleOperationEvent( TUniEditorOperationType aOperation, - TUniEditorOperationEvent /*aEvent*/ ) + TUniEditorOperationEvent aEvent ) { TBool remove( EFalse ); @@ -573,6 +590,17 @@ if ( aOperation == EUniEditorOperationProcessImage ) { + if( aEvent == EUniEditorOperationPartialComplete) + { + if(iOptimizedFlow) + { + iObserver.EditorOperationEvent( EUniEditorOperationSendUi, + EUniEditorOperationPartialComplete ); + iOptimizedFlow = EFalse; + } + return; + } + iOptimizedFlow = EFalse; // Process image error handling CArrayFixFlat* errors = iImageOperation->GetErrors(); for ( TInt i = 0; i < errors->Count(); i++ ) @@ -660,5 +688,12 @@ //else --> original object remains... CompleteOperation( KErrNone ); } - +// --------------------------------------------------------- +// CUniEditorSendUiOperation::IsOptimizedFlagSet +// --------------------------------------------------------- +// +TBool CUniEditorSendUiOperation::IsOptimizedFlagSet() + { + return iOptimizedFlow; + } // EOF diff -r 1367103c24e2 -r 696bfeff199e msg_plat/messaging_editor_api/inc/MsgExpandableControlEditor.h --- a/msg_plat/messaging_editor_api/inc/MsgExpandableControlEditor.h Mon Jun 21 15:36:19 2010 +0300 +++ b/msg_plat/messaging_editor_api/inc/MsgExpandableControlEditor.h Thu Jul 15 18:34:37 2010 +0300 @@ -350,6 +350,7 @@ CMsgEditorCustomDraw* iCustomDraw; TInt iControlType; TInt iEditortop; + TBool iFindItemEventReceived; }; #endif // CMSGEXPANDABLECONTROLEDITOR_H diff -r 1367103c24e2 -r 696bfeff199e msg_plat/messaging_editor_api/inc/MsgNaviPaneControl.h --- a/msg_plat/messaging_editor_api/inc/MsgNaviPaneControl.h Mon Jun 21 15:36:19 2010 +0300 +++ b/msg_plat/messaging_editor_api/inc/MsgNaviPaneControl.h Thu Jul 15 18:34:37 2010 +0300 @@ -127,6 +127,15 @@ */ IMPORT_C void SetNavigationControlObserver( MMsgNaviPaneControlObserver* aObserver ); + /** + * Get Message Iterator Instance + * + * @since 9.2 + * + * @return aMessageIterator Message iterator + */ + IMPORT_C CMessageIterator* GetMessageIterator(); + public: // Functions from base classes /** diff -r 1367103c24e2 -r 696bfeff199e msg_pub/messaging_editor_constants_api/inc/MsgEditor.hrh --- a/msg_pub/messaging_editor_constants_api/inc/MsgEditor.hrh Mon Jun 21 15:36:19 2010 +0300 +++ b/msg_pub/messaging_editor_constants_api/inc/MsgEditor.hrh Thu Jul 15 18:34:37 2010 +0300 @@ -174,12 +174,6 @@ EMsgFirstFreeComponentSpecificCommand = 2000 }; - -//Internal Enumeration for find item functionality -enum TMsgFindItemKeyCommands - { - EMsgFindItemKeyEvent = 0x55555555 - }; #endif