--- 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)
--- 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
--- 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);
--- 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<TUint> iMessageUids;
RArrayMessageFlagInfo iFlagInfoResponseArray;
+
+ CMsvEntrySelection* iSourceSel;
+ TBool iMarkFlag;
+ TBool iEntrySelection;
+ TInt iProgressMsgsToDo;
+ TInt iProgressMsgsDone;
+
};
#endif // __CIMAPUPDATEFLAGOPERATION_H__
--- 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();
+ }
+
+ }
+
--- 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);
--- 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);
--- 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
--- 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
--- 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 );
--- 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
--- 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
--- 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(
--- 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(
--- 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 <bldvariant.hrh>
#include <featmgr.h>
+#include <mtmuidef.hrh>
#include <messagingvariant.hrh>
#include <centralrepository.h>
@@ -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; cc<numAccounts; cc++)
{
- uid.iUid=sel->At(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
{
--- 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 <ConeResLoader.h>
#include <msvapi.h>
-#include "mcesettingstitlepanehandlerdialog.h"
+#include "MceSettingsTitlePaneHandlerDialog.h"
#include <MsgArrays.h>
--- 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 );
--- 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 );
Binary file messagingappbase/msgavkon/conf/messaging.confml has changed
Binary file messagingappbase/msgavkon/conf/messaging_102824A0.crml has changed
--- 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
--- 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 <etelmm.h>
+#include <MessagingDomainCRKeys.h>
#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
--- 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 <e32cmn.h>
// CONSTANTS
--- 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};
--- 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 <e32base.h> // CBase
-#include "muiumsvuiserviceutilitiesinternal.h"
+#include "MuiuMsvUiServiceUtilitiesInternal.h"
class CMuiuContactAddressMatcher;
class CMsgVoIPExtension;
--- 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
--- 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
{
--- 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:
--- 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:
/**
--- 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 <NcnListInternalCRKeys.h> // For CR key handling
#include <RSSSettings.h> // For ALS detection
#include <startupdomainpskeys.h>
+#include <MessagingDomainCRKeys.h>
#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
--- 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,
--- 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 <legacyminidomparser.iby>
-file=ABI_DIR\BUILD_DIR\SMILDTD.dll System\libs\SMILDTD.dll
+file=ABI_DIR\BUILD_DIR\smildtd.dll System\libs\smildtd.dll
#endif
--- 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 <commonphoneparser.h> //Common phone number validity checker
+#include <PhCltTypes.h> // PhCltTypes
#include <CommonUiInternalCRKeys.h>
#include <DocumentHandler.h>
#include <featmgr.h>
@@ -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 )
--- 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
--- 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 <gsmuelem.h>
+#include <smutset.h>
/**
A specialisation of the message server index class for SMS message entries.
Binary file mobilemessaging/smsmtm/conf/smsmtm_1000102c.crml has changed
--- 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 )
--- 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;
--- 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
--- 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
--- 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();
--- 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
--- 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.
--- 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 <UniEditor.rsg>
#include <MsgEditorAppUi.rsg>
+#include <akndiscreetpopup.h>
+#include <aknsconstants.hrh>
#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
--- 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 <msvstd.h>
#include <mmsconst.h>
-#include <UniEditorConsts.h>
+#include <unieditorconsts.h>
// CONSTANTS
@@ -112,7 +112,7 @@
};
-#include <UniMsvEntry.inl>
+#include <unimsventry.inl>
#endif // __UNIMSVENTRY_H
--- 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.
--- 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