# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1282200671 -10800 # Node ID fa1df4b996091a72f0a21dd396616503678b06bf # Parent 696bfeff199ea12ba7ae42a04752ce9e9bd12735 Revision: 201031 Kit: 201033 diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapprotocolcontroller/bwins/impapprotocolcontrollerU.DEF --- a/email/imap4mtm/imapprotocolcontroller/bwins/impapprotocolcontrollerU.DEF Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapprotocolcontroller/bwins/impapprotocolcontrollerU.DEF Thu Aug 19 09:51:11 2010 +0300 @@ -32,4 +32,5 @@ ?WaitForBackground@CImapProtocolController@@QAEXAAVTRequestStatus@@@Z @ 31 NONAME ; void CImapProtocolController::WaitForBackground(class TRequestStatus &) ?GetAccessPointIdForConnection@CImapProtocolController@@QBEHAAK@Z @ 32 NONAME ; int CImapProtocolController::GetAccessPointIdForConnection(unsigned long &) const ?UpdateFlagL@CImapProtocolController@@QAEXAAVTRequestStatus@@@Z @ 33 NONAME ; void CImapProtocolController::UpdateFlagL(class TRequestStatus &) + ?UpdateEntriesFlagL@CImapProtocolController@@QAEXAAVTRequestStatus@@ABVCMsvEntrySelection@@H@Z @ 34 NONAME ; void CImapProtocolController::UpdateEntriesFlagL(class TRequestStatus &, class CMsvEntrySelection const &, int) diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapprotocolcontroller/eabi/impapprotocolcontrollerU.DEF --- a/email/imap4mtm/imapprotocolcontroller/eabi/impapprotocolcontrollerU.DEF Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapprotocolcontroller/eabi/impapprotocolcontrollerU.DEF Thu Aug 19 09:51:11 2010 +0300 @@ -77,4 +77,5 @@ _ZTVN4Meta13TMetaVarLen16I6RBuf16EE @ 76 NONAME ABSENT _ZNK23CImapProtocolController29GetAccessPointIdForConnectionERm @ 77 NONAME _ZN23CImapProtocolController11UpdateFlagLER14TRequestStatus @ 78 NONAME + _ZN23CImapProtocolController18UpdateEntriesFlagLER14TRequestStatusRK18CMsvEntrySelectioni @ 79 NONAME diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapprotocolcontroller/inc/cimapprotocolcontroller.h --- a/email/imap4mtm/imapprotocolcontroller/inc/cimapprotocolcontroller.h Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapprotocolcontroller/inc/cimapprotocolcontroller.h Thu Aug 19 09:51:11 2010 +0300 @@ -115,6 +115,7 @@ IMPORT_C TImap4CompoundProgress Progress(); IMPORT_C void CancelAndCleanup(); IMPORT_C void UpdateFlagL(TRequestStatus& aStatus); + IMPORT_C void UpdateEntriesFlagL(TRequestStatus& aStatus,const CMsvEntrySelection& aSourceSel, TBool aFlagChanged); // mobility API from MImMobileServer void PrepareForNewCarrier(TImMobilityAction aAction, TBool aIsSeamless); diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapprotocolcontroller/inc/cimapupdateflagoperation.h --- a/email/imap4mtm/imapprotocolcontroller/inc/cimapupdateflagoperation.h Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapprotocolcontroller/inc/cimapupdateflagoperation.h Thu Aug 19 09:51:11 2010 +0300 @@ -43,6 +43,12 @@ CMsvServerEntry& aServerEntry, CImapSettings& aImapSettings ); + static CImapUpdateFlagOperation* NewL(CImapSyncManager& aSyncManager, + CMsvServerEntry& aServerEntry, + CImapSettings& aImapSettings, + const CMsvEntrySelection& aSourceSel, + TBool aFlagChanged + ); virtual void StartOperation(TRequestStatus& aStatus, CImapSession& aSession); //////////// virtual void StartOperation(TRequestStatus& aStatus);// @@ -56,6 +62,7 @@ CImapSettings& aImapSettings ); void ConstructL(); + void ConstructL(const CMsvEntrySelection& aSourceSel,TBool aFlagChanged); TBool DoRunLoopL(); void DoCancel(); @@ -67,6 +74,13 @@ RArray iMessageUids; RArrayMessageFlagInfo iFlagInfoResponseArray; + + CMsvEntrySelection* iSourceSel; + TBool iMarkFlag; + TBool iEntrySelection; + TInt iProgressMsgsToDo; + TInt iProgressMsgsDone; + }; #endif // __CIMAPUPDATEFLAGOPERATION_H__ diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapprotocolcontroller/src/cimapprotocolcontroller.cpp --- a/email/imap4mtm/imapprotocolcontroller/src/cimapprotocolcontroller.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapprotocolcontroller/src/cimapprotocolcontroller.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -3510,17 +3510,49 @@ __LOG_TEXT(KDefaultLog, "CImapProtocolController::UpdateFlagL()"); __ASSERT_DEBUG(iImapCompound==NULL, TImapServerPanic::ImapPanic(TImapServerPanic::ECreateCompoundIsNotNull)); ResetProgress(); - if (!CompleteIfBackgroundOpInProgress(aStatus)) - { - iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager, - iEntry, - *iImapSettings - ); - iRequestedOp = EUpdateFlag; - StartPrimaryOperation(); - Queue(aStatus); - SetActive(); - } - } - + if (!CompleteIfBackgroundOpInProgress(aStatus)) + { + + iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager, + iEntry, + *iImapSettings + ); + + iRequestedOp = EUpdateFlag; + StartPrimaryOperation(); + Queue(aStatus); + SetActive(); + } + + } + + + +/** +Updates the selection of messages read/unread status from the remote server. +@param aStatus +*/ +EXPORT_C void CImapProtocolController::UpdateEntriesFlagL( TRequestStatus& aStatus,const CMsvEntrySelection& aSourceSel ,TBool aFlagChanged) + + { + __LOG_TEXT(KDefaultLog, "CImapProtocolController::UpdateEntriesFlagL()"); + __ASSERT_DEBUG(iImapCompound==NULL, TImapServerPanic::ImapPanic(TImapServerPanic::ECreateCompoundIsNotNull)); + ResetProgress(); + + if (!CompleteIfBackgroundOpInProgress(aStatus)) + { + + iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager, + iEntry, + *iImapSettings, + aSourceSel, + aFlagChanged); + iRequestedOp = EUpdateFlag; + StartPrimaryOperation(); + Queue(aStatus); + SetActive(); + } + + } + diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapprotocolcontroller/src/cimapupdateflagoperation.cpp --- a/email/imap4mtm/imapprotocolcontroller/src/cimapupdateflagoperation.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapprotocolcontroller/src/cimapupdateflagoperation.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -66,6 +66,40 @@ CActiveScheduler::Add(this); } +// NewL for Selection +CImapUpdateFlagOperation* CImapUpdateFlagOperation::NewL(CImapSyncManager& aSyncManager, + CMsvServerEntry& aServerEntry, + CImapSettings& aImapSettings, + const CMsvEntrySelection& aSourceSel , TBool aFlagChanged) + + { + + CImapUpdateFlagOperation* self = new (ELeave) CImapUpdateFlagOperation(aSyncManager, + aServerEntry, + aImapSettings); + CleanupStack::PushL(self); + self->ConstructL(aSourceSel,aFlagChanged); + CleanupStack::Pop(self); + return self; + } +//// ConstructL for Selection +void CImapUpdateFlagOperation::ConstructL(const CMsvEntrySelection& aSourceSel, TBool aFlagChanged) + { + + iSourceSel=new (ELeave) CMsvEntrySelection; + CheckSelectionL(aSourceSel, iSourceSel, ETrue, EFalse, EFalse, ETrue); + + // Initialise the progress counters + iProgressMsgsToDo=iSourceSel->Count(); + iProgressMsgsDone=0; + iMarkFlag = aFlagChanged; + iEntrySelection = ETrue; + // Add to the active scheduler + CActiveScheduler::Add(this); + } + + + void CImapUpdateFlagOperation::StartOperation(TRequestStatus& aStatus, CImapSession& aSession) //void CImapUpdateFlagOperation::StartOperation(TRequestStatus& aStatus) { @@ -89,37 +123,79 @@ { case EUpdateFlag: - { - TMsvEmailEntry entry = iServerEntry.Entry(); - TUint id = entry.UID(); - iMessageUids.AppendL(id); - if(entry.Unread()) - { - entry.SetSeenIMAP4Flag(EFalse); - } - else - { - entry.SetSeenIMAP4Flag(ETrue); - } - - - User::LeaveIfError(iServerEntry.ChangeEntry(entry)); + { + HBufC8* uidSeq = NULL; + if(!iEntrySelection) //Entry iMarkFlag is Flase + { + TMsvEmailEntry entry = iServerEntry.Entry(); + TUint id = entry.UID(); + iMessageUids.AppendL(id); + if(entry.Unread()) + { + entry.SetSeenIMAP4Flag(EFalse); + } + else + { + entry.SetSeenIMAP4Flag(ETrue); + } + + + User::LeaveIfError(iServerEntry.ChangeEntry(entry)); + + uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids); + + // finished with the UID array. Clear it. + iMessageUids.Reset(); + if(entry.SeenIMAP4Flag()) + { + // issue the store command + iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray); + + } + else + { + // issue the store command + iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray); + } + } + else //Selection iMarkFlag is Trure + { + TMsvEntry *aNewEntry1; + + TInt count = iSourceSel->Count(); + while (count--) + { + iServerEntry.GetEntryFromId(iSourceSel->At(count), aNewEntry1); + TMsvEmailEntry entry(*aNewEntry1); + iMessageUids.AppendL(entry.UID()); + + if(iMarkFlag) // True means Unread + { + entry.SetSeenIMAP4Flag(EFalse); + } + else + { + entry.SetSeenIMAP4Flag(ETrue); + } + SetEntryL((*iSourceSel)[count]); + User::LeaveIfError(iServerEntry.ChangeEntry(entry)); + }// end of while - HBufC8* uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids); - - // finished with the UID array. Clear it. - iMessageUids.Reset(); - if(entry.SeenIMAP4Flag()) - { - // issue the store command - iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray); - - } - else - { - // issue the store command - iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray); - } + uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids); + + // finished with the UID array. Clear it. + iMessageUids.Reset(); + if(!iMarkFlag) //read + { + // issue the store command + iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray); + } + else //Unread + { + // issue the store command + iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray); + } + } //End of else (Selection) iProgressState = TImap4GenericProgress::EBusy; CleanupStack::PopAndDestroy(uidSeq); diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapservermtm/inc/cimap4servermtm.h --- a/email/imap4mtm/imapservermtm/inc/cimap4servermtm.h Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapservermtm/inc/cimap4servermtm.h Thu Aug 19 09:51:11 2010 +0300 @@ -119,7 +119,7 @@ TRequestStatus& aStatus ); TBool CommandExpected(); const TDesC8& Progress(); - + TInt ChangeEntriesL(const CMsvEntrySelection& aSelection, TInt aMark, TRequestStatus& aStatus); protected: IMPORT_C TInt Extension_(TUint aExtensionId, TAny *&a0, TAny *a1); diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapservermtm/src/cimap4servermtm.cpp --- a/email/imap4mtm/imapservermtm/src/cimap4servermtm.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapservermtm/src/cimap4servermtm.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -504,6 +504,65 @@ /** +ChangeEntriesL update the message read/Unread status in Local and remote, +using the IMAP COPY command. + +@param aSelection The selection of message TMsvIds that are changed. +@param aMark The selection marked as read or unread.If 1 is Unread 0 for read. +@param aStatus The request status to be completed when the operation has finished. +*/ + +TInt CImap4ServerMtm::ChangeEntriesL( const CMsvEntrySelection& aSelection, TInt aMark, TRequestStatus& aStatus ) + { + __LOG_TEXT(KDefaultLog, "CImap4ServerMtm::ChangeEntriesL()"); + + TMsvEntry* aNewEntry1 = new (ELeave) TMsvEntry; + CleanupStack::PushL(aNewEntry1); + + TBool flagChanged; + + if(aMark == 0) + flagChanged = EFalse; //Selection to update as Read. + else + flagChanged = ETrue; ////Selection to update as UnRead. + + TInt count = aSelection.Count(); + while(count--) + { + iServerEntry->GetEntryFromId(aSelection[count],aNewEntry1); + TMsvEmailEntry entry(*aNewEntry1); + if(flagChanged) + { + entry.SetSeenIMAP4Flag(EFalse); + } + else + { + entry.SetSeenIMAP4Flag(ETrue); + } + //Local Updation. + User::LeaveIfError(iServerEntry->SetEntry(entry.Id())); + User::LeaveIfError(iServerEntry->ChangeEntry(entry)); + } + //if not offline + if (iImapProtocolController->Connected()) + { + //to update read/unread flags at remote server + iImapProtocolController->UpdateEntriesFlagL(iStatus,aSelection,flagChanged); + iState= EMtmStateUpdateFlag; + Queue(aStatus); + SetActive(); + } + else + { + Queue(aStatus); + User::RequestComplete(iRequest, KErrNone); + } + CleanupStack::PopAndDestroy(1); //aNewEntry1 + return KErrNone; + } + + +/** Performs the IMAP specific MTM commands. @param aSelection A selection of messages. The use is dependant upon diff -r 696bfeff199e -r fa1df4b99609 email/imap4mtm/imapsettings/src/cimapsettings.cpp --- a/email/imap4mtm/imapsettings/src/cimapsettings.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/email/imap4mtm/imapsettings/src/cimapsettings.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2006-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" @@ -170,7 +170,7 @@ void CImapSettings::ReadResourceFileL() { RFs fs; - fs.Connect(); + User::LeaveIfError(fs.Connect()); CleanupClosePushL(fs); // NB need to check on all drives - won't necessarily be on diff -r 696bfeff199e -r fa1df4b99609 email/pop3andsmtpmtm/servermtmutils/src/imcvrecv.cpp --- a/email/pop3andsmtpmtm/servermtmutils/src/imcvrecv.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/email/pop3andsmtpmtm/servermtmutils/src/imcvrecv.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -415,11 +415,9 @@ iStore8BitData = reader.ReadInt8(); CleanupStack::PopAndDestroy(buf); - //read iStorePlainBodyText flag for writing bodytext chunk bu chunk. - buf = resFile.AllocReadLC( STORE_PLAIN_BODY_TEXT ); - reader.SetBuffer(buf); - iStorePlainBodyText = reader.ReadInt8(); - CleanupStack::PopAndDestroy(buf); + //read iStorePlainBodyText flag for writing bodytext chunk by chunk. + //For Pop case, it always writes bodytext chunk by chunk + iStorePlainBodyText = 1; buf = resFile.AllocReadLC( REMOVED_ATTACHMENT_TAG ); diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mce/group/mce.mmp --- a/messagingappbase/mce/group/mce.mmp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mce/group/mce.mmp Thu Aug 19 09:51:11 2010 +0300 @@ -26,7 +26,12 @@ TARGET mce.exe EPOCSTACKSIZE 0x6000 -EPOCHEAPSIZE 0x1000 0x2000000 + +// Not allowing emulator to allocation 0x2000000 Maximum head size for messaging, making emulator more stable. +#ifndef WINSCW + EPOCHEAPSIZE 0x1000 0x2000000 +#endif + TARGETTYPE exe UID 0x100039CE 0x100058C5 diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mce/inc/mceui.h --- a/messagingappbase/mce/inc/mceui.h Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mce/inc/mceui.h Thu Aug 19 09:51:11 2010 +0300 @@ -1154,6 +1154,8 @@ * otherwise EFalse */ TBool iIadUpdateVal; + //To check if simdialog is open or not + TBool iSimDialogOpen; }; #endif diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mce/src/MceMessageListView.cpp --- a/messagingappbase/mce/src/MceMessageListView.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mce/src/MceMessageListView.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -92,8 +92,11 @@ const TUid KMailTechnologyTypeUid = { 0x10001671 }; // These are for opening the viewer in inbox. -// We need to wait possible opened editor to be closed before opening received message. -const TInt KMceLaunchViewerStartTime = 1; // try to open viewer immediately +// try to open viewer immediately if there is no other viewer is open +const TInt KMceLaunchViewerStartTime = 1; +//0.3 sec delay is taken to ensure previously launched viewer is closed as to avoid the crashes and KErrCancel/KErrInUse errors due to launching of new viewer when currently running +//viewer is still in the process of exiting +const TInt KMceLaunchViewerStartTimeWhenEditorOpen = 300000; const TInt KMceLaunchViewerRetryTime = 500000; // wait 0.5 secs for the next trial const TInt KMceLaunchViewerRetryCounter = 20; // so editors have approx 10 secs to save... @@ -2453,6 +2456,12 @@ // ---------------------------------------------------- TBool CMceMessageListView::FindUnreadMessageAndOpenItL( const TMsvId aId ) { + TInt launchViewerStartTime = KMceLaunchViewerStartTime; + if(iMceUi->IsEditorOpen()) + { + launchViewerStartTime = KMceLaunchViewerStartTimeWhenEditorOpen; + } + // TODO: how to simplify this ? TMsvId firstUnreadMessageId = KErrNotFound; TBool oneUnreadMessage = EFalse; @@ -2504,7 +2513,7 @@ iLocalScreenClearer = NULL; iLocalScreenClearer = CAknLocalScreenClearer::NewL( EFalse ); MCELOGGER_WRITE("FindUnreadMessageAndOpenItL: start viewer launcher"); - const TTimeIntervalMicroSeconds32 startTimeInterval = KMceLaunchViewerStartTime; + TTimeIntervalMicroSeconds32 startTimeInterval = launchViewerStartTime; const TTimeIntervalMicroSeconds32 retryTimeInterval = KMceLaunchViewerRetryTime; iLaunchViewerCounter = 0; iMessageViewerLauncher->Start( diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mce/src/MceOneRowMessageListContainer.cpp --- a/messagingappbase/mce/src/MceOneRowMessageListContainer.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mce/src/MceOneRowMessageListContainer.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -1332,7 +1332,7 @@ return EKeyWasNotConsumed; } - if ( aKeyEvent.iCode == EKeyBackspace ) + if ( iOwningView.MenuBar()->ItemSpecificCommandsEnabled() && aKeyEvent.iCode == EKeyBackspace ) { MarkItemSelectionL(); SetAnchorItemIdL( diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mce/src/mceui.cpp --- a/messagingappbase/mce/src/mceui.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mce/src/mceui.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -22,6 +22,7 @@ // INCLUDE FILES #include #include +#include #include #include @@ -204,7 +205,7 @@ _LIT( KMmsMessageDumpDirectory, "C:\\Private\\1000484b\\mmsvar"); _LIT( KRootPath, "C:\\" ); const TInt KMmsCodecClientChunkSize = 1024; - +#define KMtmUiFunctionSimDialog ( KMtmFirstFreeMtmUiFunctionId + 1 ) // LOCAL FUNCTION PROTOTYPES // ==================== LOCAL FUNCTIONS ==================== @@ -232,7 +233,8 @@ iAnchorId( NULL ), iEmailClientIntegration(EFalse), iSelectableEmail(EFalse), - iEmailFramework(EFalse) + iEmailFramework(EFalse), + iSimDialogOpen(EFalse) { iMceUiFlags.SetMceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent ); } @@ -831,6 +833,7 @@ switch (aCommand) { case EEikCmdExit: + iSimDialogOpen = EFalse; Exit(); break; case EMceCmdExit: @@ -2556,21 +2559,26 @@ const TInt numAccounts=sel->Count(); for (TInt cc=0; ccAt(cc); - const TMsvEntry& tentry=iRootEntry->ChildDataL(uid.iUid); - - TRAPD(error, ( uiData=GetMtmUiDataL(tentry.iMtm) ) ); - if (error==KErrNone && uiData) - { - TInt rid; - if (uiData->QueryCapability(connectCapability, rid)==KErrNone) - { - if (tentry.Connected()) - { - connectedAccounts->AppendL( sel->At(cc) ); - } - } - } + uid.iUid=sel->At(cc); + const TMsvEntry& tentry=iRootEntry->ChildDataL(uid.iUid); + // if cmail feature is enabled, no need to add cmail account in connectedAccounts. + if ( !( iEmailFramework && + ( tentry.iMtm == KSenduiMtmImap4Uid || tentry.iMtm == KSenduiMtmPop3Uid || + tentry.iMtm.iUid == KUidMsgTypeFsMtmVal ))) + { + TRAPD(error, ( uiData=GetMtmUiDataL(tentry.iMtm) ) ); + if (error==KErrNone && uiData) + { + TInt rid; + if (uiData->QueryCapability(connectCapability, rid)==KErrNone) + { + if (tentry.Connected()) + { + connectedAccounts->AppendL( sel->At(cc) ); + } + } + } + } } CleanupStack::PopAndDestroy( sel ); MCELOGGER_LEAVEFN("ConnectedServicesLC()"); @@ -4484,6 +4492,10 @@ TBuf8<1> buf; if (!(aFunction.iFlags&EMtudAsynchronous)) { + if(aFunction.iFuncId == KMtmUiFunctionSimDialog) + { + iSimDialogOpen = ETrue; + } mtmUi.InvokeSyncFunctionL(aFunction.iFuncId, *sel, buf); } else @@ -6649,13 +6661,24 @@ // ---------------------------------------------------- void CMceUi::ResetAndHide() { - if (!MceViewActive( EMceMainViewActive )) + // To close embedded MsgEditor + if ( IsEditorOpen() ) + { + CloseEditorApp(); + } + // Messaging was not exiting properly when "exit" is pressed from settings dialog. + // iMceUiFlags.MceFlag( EMceUiFlagsSettingsDialogOpen ) will be true + // when we exit from any of the settings Dialog. + // Closing of Settings dialogs will be taken care by AVKON. + if (!(MceViewActive( EMceMainViewActive) && IsForeground()) || + iMceUiFlags.MceFlag( EMceUiFlagsSettingsDialogOpen ) || iSimDialogOpen ) { SetCustomControl(1); // Disable bring-to-foreground on view activation TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( \ KMessagingCentreMainViewUid, \ TUid::Uid(KMceHideInBackground), \ KNullDesC8 ) ) ; + iSimDialogOpen = EFalse; } else { diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mcesettings/inc/MceSettingsDialog.h --- a/messagingappbase/mcesettings/inc/MceSettingsDialog.h Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mcesettings/inc/MceSettingsDialog.h Thu Aug 19 09:51:11 2010 +0300 @@ -25,7 +25,7 @@ #include #include -#include "mcesettingstitlepanehandlerdialog.h" +#include "MceSettingsTitlePaneHandlerDialog.h" #include diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mcesettings/mcesettingsgsplugin/src/MceSettingsGSPluginContainer.cpp --- a/messagingappbase/mcesettings/mcesettingsgsplugin/src/MceSettingsGSPluginContainer.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mcesettings/mcesettingsgsplugin/src/MceSettingsGSPluginContainer.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -190,13 +190,15 @@ TUid uid; uid.iUid = KMceSettingsCBSUid; + if(iCbs) + { + HBufC* text = StringLoader::LoadL( R_MCEUI_CBS_SETTINGS_TEXT, iEikonEnv ); + TUidNameInfo cbsSettings( uid, *text ); + delete text; + iMsgTypesSettings->AppendL( cbsSettings ); + } - HBufC* text = StringLoader::LoadL( R_MCEUI_CBS_SETTINGS_TEXT, iEikonEnv ); - TUidNameInfo cbsSettings( uid, *text ); - delete text; - iMsgTypesSettings->AppendL( cbsSettings ); - - text = StringLoader::LoadL( R_MCEUI_GENERAL_SETTINGS_TEXT, iEikonEnv ); + HBufC* text = StringLoader::LoadL( R_MCEUI_GENERAL_SETTINGS_TEXT, iEikonEnv ); TUidNameInfo generalSettings( uid, *text ); delete text; iMsgTypesSettings->AppendL( generalSettings ); diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mcesettings/src/MceSettingsDialog.cpp --- a/messagingappbase/mcesettings/src/MceSettingsDialog.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mcesettings/src/MceSettingsDialog.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -360,12 +360,15 @@ TUid uid; uid.iUid = KMceSettingsCBSUid; - HBufC* text = StringLoader::LoadL( R_MCE_CBS_SETTINGS_TEXT, iEikonEnv ); - TUidNameInfo cbsSettings( uid, *text ); - delete text; - iMsgTypesSettings->AppendL( cbsSettings ); + if(iCbs) + { + HBufC* text = StringLoader::LoadL( R_MCE_CBS_SETTINGS_TEXT, iEikonEnv ); + TUidNameInfo cbsSettings( uid, *text ); + delete text; + iMsgTypesSettings->AppendL( cbsSettings ); + } - text = StringLoader::LoadL( R_MCE_GENERAL_SETTINGS_TEXT, iEikonEnv ); + HBufC* text = StringLoader::LoadL( R_MCE_GENERAL_SETTINGS_TEXT, iEikonEnv ); TUidNameInfo generalSettings( uid, *text ); delete text; iMsgTypesSettings->AppendL( generalSettings ); diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgavkon/conf/messaging.confml Binary file messagingappbase/msgavkon/conf/messaging.confml has changed diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgavkon/conf/messaging_102824A0.crml Binary file messagingappbase/msgavkon/conf/messaging_102824A0.crml has changed diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgavkon/msgindicatorplugin/inc/MsgWaitingObserver.h --- a/messagingappbase/msgavkon/msgindicatorplugin/inc/MsgWaitingObserver.h Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/msgavkon/msgindicatorplugin/inc/MsgWaitingObserver.h Thu Aug 19 09:51:11 2010 +0300 @@ -49,6 +49,10 @@ virtual ~CWaitingObserver(); TInt GetMsgCount(const TIndicatorMessageType aMsgType); + /** + * Check the KMuiuSupressAllNotificationConfiguration value + */ + TBool CheckSupressNotificationSettingL(); public: // From CActive diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgavkon/msgindicatorplugin/src/MsgWaitingObserver.cpp --- a/messagingappbase/msgavkon/msgindicatorplugin/src/MsgWaitingObserver.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/msgavkon/msgindicatorplugin/src/MsgWaitingObserver.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -18,6 +18,7 @@ #include +#include #include "MsgWaitingObserver.h" #include "msgindicatorpluginlog.h" #include "msgindicatorpluginimplementation.h" @@ -169,19 +170,21 @@ MSGPLUGINLOGGER_WRITE_FORMAT( "::UpdateIndicatorStatus: Fax count %d", iMsgWaiting.iFaxMsgs ); iMsgWaiting = iMsgWaitingPckg(); - - if(iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayVoicemailActive) + if(!CheckSupressNotificationSettingL()) { - if ( !iIndicatorPlugin.IsALSSupported() ) - { - MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaiting )"); - iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaiting ); - } - else - { - MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaitingOnLine1 )"); - iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaitingOnLine1 ); - } + if(iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayVoicemailActive) + { + if ( !iIndicatorPlugin.IsALSSupported() ) + { + MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaiting )"); + iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaiting ); + } + else + { + MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaitingOnLine1 )"); + iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaitingOnLine1 ); + } + } } if ( iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayAuxVoicemailActive ) { @@ -194,5 +197,29 @@ iIndicatorPlugin.UpdateL( EAknIndicatorFaxMessage ); } } - +// ------------------------------------------------------------------- +// Check the KMuiuSupressAllNotificationConfiguration value +// ------------------------------------------------------------------- +// +TBool CWaitingObserver::CheckSupressNotificationSettingL() +{ + TBool result = EFalse; + TInt value = 0; + CRepository* repository = NULL; + + TRAPD( err, repository = CRepository::NewL( KCRUidMuiuMessagingConfiguration ) ); + if( err == KErrNone && repository != NULL ) + { + CleanupStack::PushL( repository ); + err = repository->Get( KMuiuSupressAllNotificationConfiguration, value ); + + if(err == KErrNone && (value & KMuiuNotificationSupressedForVoiceMail )) + { + result = ETrue; + } + } + MSGPLUGINLOGGER_WRITE_FORMAT( "CWaitingObserver: SupressNotification %d", result ); + CleanupStack::PopAndDestroy( repository ); + return result; +} // End of File diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h --- a/messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h Thu Aug 19 09:51:11 2010 +0300 @@ -22,7 +22,7 @@ #define CMUIUFLAGGER_H // INCLUDES -#include "muiuflags.h" +#include "MuiuFlags.h" #include // CONSTANTS diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalCRKeys.h --- a/messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalCRKeys.h Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalCRKeys.h Thu Aug 19 09:51:11 2010 +0300 @@ -132,7 +132,9 @@ const TUint32 KSmumPreviousSimSmscNumber = 0x00000018; const TUint32 KSmumShowSMSCTimeStamp = 0x00000019; const TUint32 KSmsSettingsDiscardUnknownPortMsgs = 0x0000001A; - +// REQ:417-48417 Message forward with sender info +const TUint32 KForwardWithSenderInfo = 0x0000001B; +// End REQ:417-48417 // // Send UI Settings API const TUid KCRUidSendUi = {0x101F8873}; diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h --- a/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h Thu Aug 19 09:51:11 2010 +0300 @@ -21,7 +21,7 @@ #define MUIUCONTACTSERVICE_H #include // CBase -#include "muiumsvuiserviceutilitiesinternal.h" +#include "MuiuMsvUiServiceUtilitiesInternal.h" class CMuiuContactAddressMatcher; class CMsgVoIPExtension; diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuLock.h --- a/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuLock.h Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuLock.h Thu Aug 19 09:51:11 2010 +0300 @@ -22,7 +22,7 @@ class CRepository; -#include "messaginginternalcrkeys.h" +#include "MessagingInternalCRKeys.h" // Lock identifier for messaging settings access diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp --- a/messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -425,28 +425,31 @@ //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() ) { aForward = !aForward; } - - if ( aForward ) - { - if ( iIterator->NextMessageExists() ) - { - ret = ETrue; - } - } - else - { - if ( iIterator->PreviousMessageExists() ) - { - ret = ETrue; - } - } + if(iIterator) + { + if ( aForward ) + { + if ( iIterator->NextMessageExists() ) + { + ret = ETrue; + } + } + else + { + if ( iIterator->PreviousMessageExists() ) + { + ret = ETrue; + } + } + } + } return ret; @@ -466,10 +469,11 @@ CMsgEditorDocument* doc = Document(); //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(); + if(iIterator) + { + aCurrentIndex = iIterator->CurrentMessageIndex(); + aMsgsInFolder = iIterator->MessagesInFolder(); + } } else { diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/msgeditor/mediacontrolsrc/MsgAudioControl.cpp --- a/messagingappbase/msgeditor/mediacontrolsrc/MsgAudioControl.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/msgeditor/mediacontrolsrc/MsgAudioControl.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -343,6 +343,11 @@ SetState( EMsgAsyncControlStateNoRights ); break; } + case KErrInUse: // To handle if head phone is removed from the jack while playing audio. + { + Stop(); + break; + } case KErrNoMemory: case KErrNotSupported: case KErrCorrupt: diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/ncnlist/inc/CVoiceMailManager.h --- a/messagingappbase/ncnlist/inc/CVoiceMailManager.h Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/ncnlist/inc/CVoiceMailManager.h Thu Aug 19 09:51:11 2010 +0300 @@ -99,6 +99,11 @@ */ void NotifyAboutSIMChange(); + /** + * Check the KMuiuSupressAllNotificationConfiguration value + */ + TBool CheckSupressNotificationSettingL(); + private: /** diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/ncnlist/src/CVoiceMailManager.cpp --- a/messagingappbase/ncnlist/src/CVoiceMailManager.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/ncnlist/src/CVoiceMailManager.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -26,6 +26,7 @@ #include // For CR key handling #include // For ALS detection #include +#include #include "NcnDebug.h" #include "NcnCRHandler.h" @@ -76,7 +77,12 @@ //Clear soft notifications that might be drawn automatically by avkon //TSW Error TWOK-6PNT26 ClearVoiceMailSoftNotes(); - + //clear Voicemail indicators only when KMuiuSupressAllNotificationConfiguration(VVM) is enabled. + if(CheckSupressNotificationSettingL()) + { + iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, EFalse ); + iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine2, EFalse ); + } //Get SIM change status at the startup. If the SIM will change after //boot-up we get notifed by the Model so no need to subscribe for this key //TSW ID EHCN-6NRAZE @@ -179,13 +185,16 @@ NCN_RDEBUG_INT(_L("CVoiceMailManager : %d voice mails in line 1 (ALS supported)"), aVoiceMailsInLine1 ); NCN_RDEBUG_INT(_L("CVoiceMailManager : %d voice mails in line 2 (ALS supported)"), aVoiceMailsInLine2 ); - iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailOnLine1Notification, aVoiceMailsInLine1 ); - iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailOnLine2Notification, aVoiceMailsInLine2 ); - - // Indications - // SysApp checks ALS support and decides whether to use o_o or O_o (left O full), if ALS supported - iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, aVoiceMailsInLine1 ? ETrue : EFalse ); - iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine2, aVoiceMailsInLine2 ? ETrue : EFalse ); + if(!CheckSupressNotificationSettingL()) + { + iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailOnLine1Notification, aVoiceMailsInLine1 ); + iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailOnLine2Notification, aVoiceMailsInLine2 ); + NCN_RDEBUG( _L("CVoiceMailManager: UpdateNoteAndIndicationWithALS With VVM off") ); + // Indications + // SysApp checks ALS support and decides whether to use o_o or O_o (left O full), if ALS supported + iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, aVoiceMailsInLine1 ? ETrue : EFalse ); + iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine2, aVoiceMailsInLine2 ? ETrue : EFalse ); + } } // --------------------------------------------------------- @@ -243,12 +252,16 @@ { NCN_RDEBUG_INT(_L("CVoiceMailManager : %d voice mails in line 1 (ALS not supported)"), voiceMailsInLine1 ); - //Soft notification. The SN must not contain any reference to line numbers - iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailNotification, voiceMailsInLine1 ); - - // SysApp checks ALS support and decides whether to use o_o or O_o (left O full), if ALS supported - // ENcnIndicatorVMLine1 is mapped to KDisplayVoicemailActive in CNcnMsgWaitingManager - iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, ETrue ); + if(!CheckSupressNotificationSettingL()) + { + NCN_RDEBUG( _L("CVoiceMailManager:SetIndicator and Notification ALS not supported With VVM off") ); + //Soft notification. The SN must not contain any reference to line numbers + iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailNotification, voiceMailsInLine1 ); + + // SysApp checks ALS support and decides whether to use o_o or O_o (left O full), if ALS supported + // ENcnIndicatorVMLine1 is mapped to KDisplayVoicemailActive in CNcnMsgWaitingManager + iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, ETrue ); + } } else if( iIsALSSupported == TRUE ) { @@ -315,4 +328,30 @@ return EFalse; } } + +// ------------------------------------------------------------------- +// Check the KMuiuSupressAllNotificationConfiguration value +// ------------------------------------------------------------------- +// +TBool CVoiceMailManager::CheckSupressNotificationSettingL() +{ + TBool result = EFalse; + TInt value = 0; + CRepository* repository = NULL; + + TRAPD( err, repository = CRepository::NewL( KCRUidMuiuMessagingConfiguration ) ); + if( err == KErrNone && repository != NULL ) + { + CleanupStack::PushL( repository ); + err = repository->Get( KMuiuSupressAllNotificationConfiguration, value ); + + if(err == KErrNone && (value & KMuiuNotificationSupressedForVoiceMail )) + { + result = ETrue; + } + } + NCN_RDEBUG_INT( _L("CNcnNotifier::CheckSupressNotificationSetting() - result: %d"), result ); + CleanupStack::PopAndDestroy( repository ); + return result; +} // End of File diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/smartmessaging/vcardbc/src/vcardvpbutil.cpp --- a/messagingappbase/smartmessaging/vcardbc/src/vcardvpbutil.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/smartmessaging/vcardbc/src/vcardvpbutil.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -246,15 +246,25 @@ MVPbkStoreContact* CVCardVpbUtil::ContactData() const { __ASSERT_DEBUG( iContactsToShow.Count() > 0, Panic( ENoContactImported ) ); + // If iContactsToShow.Count() is zero, then it is not possible to parse the fields,so it has to return from here.. + if ( iContactsToShow.Count() == 0 ) + { + return NULL; + } return iContactsToShow[0]; } TBool CVCardVpbUtil::IsContactItemEmpty() { - const MVPbkStoreContactFieldCollection& fields = ContactData()->Fields(); + TBool ret( ETrue ); + MVPbkStoreContact* storeContact = ContactData(); + if ( !storeContact ) + { + return ret; + } + const MVPbkStoreContactFieldCollection& fields = storeContact->Fields(); TInt count = fields.FieldCount(); - TBool ret( ETrue ); while( count ) { __ASSERT_DEBUG( count <= fields.FieldCount() && count > 0, diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/smilparser/Rom/Gmxml.iby --- a/messagingappbase/smilparser/Rom/Gmxml.iby Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/smilparser/Rom/Gmxml.iby Thu Aug 19 09:51:11 2010 +0300 @@ -19,7 +19,7 @@ #define __GMXML_IBY__ #include -file=ABI_DIR\BUILD_DIR\SMILDTD.dll System\libs\SMILDTD.dll +file=ABI_DIR\BUILD_DIR\smildtd.dll System\libs\smildtd.dll #endif diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/audiomsg/src/audiomessageappui.cpp --- a/mobilemessaging/audiomsg/src/audiomessageappui.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/audiomsg/src/audiomessageappui.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -50,6 +50,7 @@ // Common components #include //Common phone number validity checker +#include // PhCltTypes #include #include #include @@ -1333,7 +1334,15 @@ break; case R_AUDIOMESSAGE_VIEWER_CONTEXT_MENU://call, reply fw, delete { + TPhCltTelephoneNumber number; // phoneclient + number.Zero(); const TPtrC details = iMtm->Entry().Entry().iDetails; + + if(CommonPhoneParser::IsValidPhoneNumber( + details, CommonPhoneParser::ESMSNumber )) + { + number = details; + } if( (FocusedControlId( ) == EMsgComponentIdFrom) && ( ( iMtm->Sender( ) ).Length() ) ) { iFindItemMenu->SetSenderHighlightStatus( ETrue ); @@ -1348,7 +1357,7 @@ aMenuPane, EFindItemContextMenuPlaceHolder, TMmsGenUtils::PureAddress( iMtm->Sender() ), - ( details.Length() == 0 ), //"Is sender known" + ( KErrNotFound == number.Match( details ) ), //"Is sender known" ETrue ); // no items dimmed for now if ( iMtm->Sender().Length() <= 0 ) diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp --- a/mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -1105,6 +1105,7 @@ if ( !iFindItemMenu ) { iFindItemMenu = CFindItemMenu::NewL( EFindItemMenuPlaceHolder ); + iFindItemMenu->SetCallSubMenuVisibility ( EFalse ); // Click-To-Call if ( iHeader->SenderType( ) == EMuiuAddressTypeEmail ) { // Set sender type to find menu diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/smsmtm/clientmtm/inc/tmsvsmsentry.h --- a/mobilemessaging/smsmtm/clientmtm/inc/tmsvsmsentry.h Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/smsmtm/clientmtm/inc/tmsvsmsentry.h Thu Aug 19 09:51:11 2010 +0300 @@ -23,6 +23,7 @@ #define __TMSVSMSENTRY_H__ #include +#include /** A specialisation of the message server index class for SMS message entries. diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/smsmtm/conf/smsmtm_1000102c.crml Binary file mobilemessaging/smsmtm/conf/smsmtm_1000102c.crml has changed diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp --- a/mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -763,6 +763,17 @@ EMsgHeader ); // take the number iNumber = iSmsHeader->FromAddress(); + if ( !iFlags.iIsEmailMessage ) + { + iFlags.iValidSenderNumber = CommonPhoneParser::IsValidPhoneNumber( + iNumber, CommonPhoneParser::ESMSNumber ); + } + else + { + iFlags.iValidSenderNumber = + MsvUiServiceUtilities::IsValidEmailAddressL( + iRecipientstring ); + } break; default: #if defined ( _DEBUG ) @@ -884,6 +895,7 @@ { // Prepare FindItem iFindItemMenu = CFindItemMenu::NewL( EFindItemMenuPlaceHolder ); + iFindItemMenu->SetCallSubMenuVisibility ( EFalse ); // Click-To-Call iFindItemMenu->AttachItemFinderMenuL( R_SMSV_OPTIONSMENUPANE ); } } @@ -3118,6 +3130,17 @@ } // take the number iNumber = iSmsHeader->FromAddress(); + if ( !iFlags.iIsEmailMessage ) + { + iFlags.iValidSenderNumber = CommonPhoneParser::IsValidPhoneNumber( + iNumber, CommonPhoneParser::ESMSNumber ); + } + else + { + iFlags.iValidSenderNumber = + MsvUiServiceUtilities::IsValidEmailAddressL( + iRecipientstring ); + } break; default: #if defined ( _DEBUG ) diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/smum/group/SMUM.RSS --- a/mobilemessaging/smum/group/SMUM.RSS Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/smum/group/SMUM.RSS Thu Aug 19 09:51:11 2010 +0300 @@ -324,6 +324,15 @@ type = EMuiuSettingsSelectionList; array_id = r_sms_settings_message_conversion; }, + // REQ:417-48417 Message forward with sender info + // must pay attention to the order: order of item in rss file is same with the enum defined in head file. + MUIU_SETTINGS_ITEM + { + title = qtn_mce_setting_sms_forward; + type = EMuiuSettingsSelectionList; + array_id = r_sms_settings_yes_no; + }, + // End REQ:417-48417 MUIU_SETTINGS_ITEM { title = qtn_mce_settings_sms_connection; diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/smum/inc/SmumSettingsDialogGSM.h --- a/mobilemessaging/smum/inc/SmumSettingsDialogGSM.h Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/smum/inc/SmumSettingsDialogGSM.h Thu Aug 19 09:51:11 2010 +0300 @@ -72,8 +72,11 @@ ESmumCharSupportInUseLBI, //= 3 ESmumDeliveryReportLBI, //= 4 ESmumValidityPeriodLBI, //= 5 - ESmumPreferredConnectionLBI, //= 6 - ESmumReplyViaSameCentreLBI //= 7 + // REQ:417-48417 Message forward with sender info + ESmumForwardWithSenderInfoLBI, //= 6 + // End REQ:417-48417 + ESmumPreferredConnectionLBI, //= 7 + ESmumReplyViaSameCentreLBI //= 8 }; enum TSmumMainSmsSendingOptSettingLBIndex @@ -329,6 +332,9 @@ TInt iRemoveReplyScSetting; TInt iStoreSettingsIndex; TInt iMskId; + // REQ:417-48417 Message forward with sender info + TBool iForwardWithSenderSupported; + // End REQ:417-48417 }; #endif // SMUMSETTINGSDIALOGGSM_H diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/smum/loc/smum.loc --- a/mobilemessaging/smum/loc/smum.loc Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/smum/loc/smum.loc Thu Aug 19 09:51:11 2010 +0300 @@ -631,3 +631,9 @@ //d:queued when the phone is outside coverage area //l:list_setting_pane_t1 #define qtn_mce_settings_sms_queuing "Message queuing" + +//d:REQ:417-48417 Message forward with sender info +//l:list_setting_pane_t1 +//r:9.2 +#define qtn_mce_setting_sms_forward "Forward with sender info" +// End REQ:417-48417 diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp --- a/mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -150,6 +150,9 @@ // Prepare FeatureManager, read values to members and uninitialize FeatureManager FeatureManager::InitializeLibL(); iHelpFeatureSupported = FeatureManager::FeatureSupported( KFeatureIdHelp ); + // REQ:417-48417 Message forward with sender info + iForwardWithSenderSupported = FeatureManager::FeatureSupported(KFeatureIdMsgForwardWithSender); + // End REQ:417-48417 FeatureManager::UnInitializeLib(); // Read the supported settings iEmailFeatureSupported = SmumUtil::CheckEmailOverSmsSupportL(); @@ -624,6 +627,23 @@ SetItem( index, iSettings.ReplyPath() ? ESmumSettingsYes : ESmumSettingsNo ); } } + + // REQ:417-48417 Message forward with sender info + if (!iTypeOfSettings && iForwardWithSenderSupported) + { + if ( !iSettingsArrayIndex->Find ( ESmumForwardWithSenderInfoLBI, key, index ) ) + { + TInt forwardWithSenderInfo; + if ( iCentralRapository->Get( KForwardWithSenderInfo, forwardWithSenderInfo ) != KErrNone ) + { + //In case of any error,set the default value to 0 + forwardWithSenderInfo = 0; + } + SetItem(index, forwardWithSenderInfo? ESmumSettingsYes : ESmumSettingsNo); + } + } + // End REQ:417-48417 + SMUMLOGGER_LEAVEFN(" CSmumMainSettingsDialogGSM::OpeningDialogL"); } @@ -766,6 +786,17 @@ iSettings.SetReplyPath( Item( index ) == ESmumSettingsYes ); } } + + // REQ:417-48417 Message forward with sender info + if (!iTypeOfSettings && iForwardWithSenderSupported) + { + if (!iSettingsArrayIndex->Find ( ESmumForwardWithSenderInfoLBI, key, index )) + { + iCentralRapository->Set(KForwardWithSenderInfo , Item( index ) == ESmumSettingsYes); + } + } + // End REQ:417-48417 + SMUMLOGGER_LEAVEFN(" CSmumMainSettingsDialogGSM::ClosingDialogL"); } @@ -1091,6 +1122,15 @@ } // ServiceCentreInUseLBI are removed } } + // REQ:417-48417 Message forward with sender info + if (!iTypeOfSettings) + { + if (!iForwardWithSenderSupported && variatedValue >= ESmumForwardWithSenderInfoLBI) + { + variatedValue ++; // if not support this feature, ESmumForwardWithSenderInfoLBI is removed + } + } + // End REQ:417-48417 return variatedValue; } @@ -1150,6 +1190,21 @@ ESmumSendOptServiceCentreInUseLBI : ESmumServiceCentreInUseLBI ); needToBeCompressed = ETrue; } + + // REQ:417-48417 Message forward with sender info + if (!iForwardWithSenderSupported && !iTypeOfSettings) + { + TInt index; + TKeyArrayFix key(0, ECmpTInt); + TInt found = iSettingsArrayIndex->Find(ESmumForwardWithSenderInfoLBI, key, index); + if (0 == found) + { + DeleteSettingItemFromArrays(index); + needToBeCompressed = ETrue; + } + } + // End REQ:417-48417 + if ( needToBeCompressed ) { iSettingsArray->Compress(); diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/unieditor/application/bld/UniEditor.mmp --- a/mobilemessaging/unieditor/application/bld/UniEditor.mmp Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/unieditor/application/bld/UniEditor.mmp Thu Aug 19 09:51:11 2010 +0300 @@ -131,6 +131,12 @@ LIBRARY peninputclient.lib LIBRARY cenrepnotifhandler.lib +// for CEikRichTextEditor to show global warning note +LIBRARY eikctl.lib +LIBRARY uiklaf.lib +LIBRARY form.lib + + #ifdef RD_MSG_XHTML_SUPPORT LIBRARY xhtmlparser.lib #endif diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/unieditor/application/inc/UniEditorAppUi.h --- a/mobilemessaging/unieditor/application/inc/UniEditorAppUi.h Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/unieditor/application/inc/UniEditorAppUi.h Thu Aug 19 09:51:11 2010 +0300 @@ -1249,6 +1249,12 @@ * Notification from central repository */ void HandleNotifyInt( TUint32 aId, TInt aNewValue ); + + /** + * Shows the Popup note in ITUT, when message size exceeds or deceeds + * a certain limit or it changes from sms to mms and vice versa + */ + void ShowDiscreetPopUpL(const TDesC& aMessage); /** * Is Inserted objects path are valid. diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp --- a/mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -141,6 +141,8 @@ #include #include +#include +#include #include "UniSendingSettings.h" #include "UniPluginApi.h" @@ -265,6 +267,8 @@ iWaitResId( -1 ), iOriginalSlide( -1 ), iNextFocus( EMsgComponentIdNull ), + iPopupChangedMmsBuffer(NULL), + iPopupChangedSmsBuffer(NULL), iEditorFlags( EShowInfoPopups ), iMskResId( R_UNIEDITOR_OPTIONS_CLOSE ), iOptimizedFlow(EFalse), @@ -451,6 +455,18 @@ iLongTapDetector->SetTimeDelayBeforeAnimation( KUniLongTapStartDelay ); iLongTapDetector->SetLongTapDelay( KUniLongTapTimeDelay ); iTapConsumed = EFalse; + + //Korean Req: 415-5434 + if ( iEditorFlags & EShowInfoPopups ) + { + iPopupNote = CAknInfoPopupNoteController::NewL(); + iPopupNote->SetTimeDelayBeforeShow( 0 ); + iPopupNote->SetTimePopupInView( 3000 ); + + iPopupSmsSizeAboveLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_ABOVE_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv ); + iPopupSmsSizeBelowLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_UNDER_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv ); + } + } @@ -794,16 +810,8 @@ if ( iEditorFlags & EShowInfoPopups ) { - iPopupNote = CAknInfoPopupNoteController::NewL(); - iPopupNote->SetTimeDelayBeforeShow( 0 ); - iPopupNote->SetTimePopupInView( 3000 ); - iPopupChangedMmsBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_MSG_CHANGED_MMS, iCoeEnv ); - iPopupChangedSmsBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_MSG_CHANGED_SMS, iCoeEnv ); - - //Korean Req: 415-5434 - iPopupSmsSizeAboveLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_ABOVE_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv ); - iPopupSmsSizeBelowLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_UNDER_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv ); + iPopupChangedSmsBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_MSG_CHANGED_SMS, iCoeEnv ); } @@ -1184,7 +1192,17 @@ { // No absolute maximum characters defined -> Calculate // character maximum using maximum SMS part limit. - maxSmsCharacters = maxSmsParts * lengthMany; + + if( maxSmsParts > 1 ) + { + maxSmsCharacters = maxSmsParts * lengthMany; + } + else + { + // for korean variant + maxSmsCharacters = lengthOne; + } + } CalculateSMSMsgLen(charsLeft,msgsParts); if( model->ObjectList().Count() == 0 && @@ -6337,8 +6355,15 @@ { case EMsgMediaImage: { - // Set focus always first to the image control... - iView->SetFocus( EMsgComponentIdImage ); + // Set the focus to Text field so that user will be able to + // Type the text when image height is too big + CMsgBodyControl* bodyCtrl = BodyCtrl(); + if ( bodyCtrl ) + { + // Put the cursor at the end of Text. + bodyCtrl->SetCursorPosL( bodyCtrl->Editor().TextLength() ); + iView->SetFocus( EMsgComponentIdBody ); + } break; } case EMsgMediaAudio: @@ -7876,8 +7901,7 @@ iEditorFlags |= ESmsSizeWarningNoteShown; if( iPopupNote ) { - iPopupNote->SetTextL( iPopupSmsSizeAboveLimitBuffer->Des() ); - iPopupNote->ShowInfoPopupNote(); + ShowDiscreetPopUpL(iPopupSmsSizeAboveLimitBuffer->Des()); } } } @@ -7890,8 +7914,7 @@ iEditorFlags &= ~ESmsSizeWarningNoteShown; if( iPopupNote ) { - iPopupNote->SetTextL( iPopupSmsSizeBelowLimitBuffer->Des() ); - iPopupNote->ShowInfoPopupNote(); + ShowDiscreetPopUpL(iPopupSmsSizeBelowLimitBuffer->Des()); } } } @@ -8589,11 +8612,12 @@ // void CUniEditorAppUi::ShowPopupNoteL( TBool aMms ) { - if( iPopupNote ) - { - iPopupNote->SetTextL( aMms? iPopupChangedMmsBuffer->Des(): - iPopupChangedSmsBuffer->Des() ); - iPopupNote->ShowInfoPopupNote(); + if( iPopupNote && iPopupChangedMmsBuffer ) + { + // additional check iPopupChangedMmsBuffer is required as iPopupNote + // will be intialized in ConstructL but not iPopupChangedMmsBuffer. + // This change is done as part of Korean req. + ShowDiscreetPopUpL(aMms? iPopupChangedMmsBuffer->Des(): iPopupChangedSmsBuffer->Des()); } } @@ -10026,5 +10050,35 @@ return bCanSave; } +// --------------------------------------------------------- +// CUniEditorAppUi::ShowDiscreetPopUpL +// Shows the Popup note in ITUT, when message size exceeds or deceeds +// a certain limit or it changes from sms to mms and vice versa +// --------------------------------------------------------- +// +void CUniEditorAppUi::ShowDiscreetPopUpL(const TDesC& aMessage) + { + TInt bitmapId = KErrNotFound; + TInt maskId = KErrNotFound; + + // No discreet popup => Uid 0 + const TUid KDiscreetPopupUidNone = + { + 0x0 + }; + + CAknDiscreetPopup::ShowGlobalPopupL(aMessage, // 1st text row + KNullDesC, // second text row + KAknsIIDDefault, // icon skin id + KNullDesC, // bitmap file path + bitmapId, // bitmap id + maskId, // mask id + KAknDiscreetPopupDurationLong, // flags + 0, // command id + NULL, // command observer + KDiscreetPopupUidNone, // application to be launched + KDiscreetPopupUidNone); // view to be activated + } + // End of file diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/unieditor/inc/UniMsvEntry.h --- a/mobilemessaging/unieditor/inc/UniMsvEntry.h Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/unieditor/inc/UniMsvEntry.h Thu Aug 19 09:51:11 2010 +0300 @@ -24,7 +24,7 @@ #include #include -#include +#include // CONSTANTS @@ -112,7 +112,7 @@ }; -#include +#include #endif // __UNIMSVENTRY_H diff -r 696bfeff199e -r fa1df4b99609 mobilemessaging/unieditor/utils/src/UniObjectsViewDialog.cpp --- a/mobilemessaging/unieditor/utils/src/UniObjectsViewDialog.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/mobilemessaging/unieditor/utils/src/UniObjectsViewDialog.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -924,7 +924,7 @@ aMenuPane->SetItemDimmed( EMsgViewAttachmentCmdSave, ETrue ); showSendMenu = EFalse; } - if ( index != -1 ) + if ( index != -1 && !iBusy) { // Catch this leave. If something peculiar coming in msg headers // and atta not natively handled by viewer CanSave might leave. diff -r 696bfeff199e -r fa1df4b99609 msg_plat/messaging_center_ui_utilities_api/inc/MessagingDomainCRKeys.h --- a/msg_plat/messaging_center_ui_utilities_api/inc/MessagingDomainCRKeys.h Thu Jul 15 18:34:37 2010 +0300 +++ b/msg_plat/messaging_center_ui_utilities_api/inc/MessagingDomainCRKeys.h Thu Aug 19 09:51:11 2010 +0300 @@ -56,4 +56,11 @@ const TUint32 KMuiuDLNewEmailFlag = 8; const TUint32 KMuiuDLInstantMessageFlag = 16; const TUint32 KMuiuDLAudioMessageFlag = 32; + +// +// The field controlling the value that takes the decision to supress +// the whole notification/indicator for voice mail +const TUint32 KMuiuSupressAllNotificationConfiguration = 0x00000004; +const TUint32 KMuiuNotificationSupressedForVoiceMail = 1; + #endif // MESSAGINGDOMAINCRKEYS_H \ No newline at end of file