diff -r 84d9eb65b26f -r 518b245aa84c messagingapp/msgui/msguiutils/src/mmsconformancecheck.cpp --- a/messagingapp/msgui/msguiutils/src/mmsconformancecheck.cpp Mon May 03 12:29:07 2010 +0300 +++ b/messagingapp/msgui/msguiutils/src/mmsconformancecheck.cpp Fri Jun 25 15:47:40 2010 +0530 @@ -21,24 +21,26 @@ #include #include #include -#include +#include #include #include #include #include #include -#include +#include +#include #include "unidatamodelloader.h" #include "unidatamodelplugininterface.h" -#include "unieditorgenutils.h" // This is needed for KDefaultMaxSize -#include "s60qconversions.h" +#include "UniEditorGenUtils.h" // This is needed for KDefaultMaxSize +#include #include "debugtraces.h" //DEFINES #define RMODE_INSERT_ERROR hbTrId("Unable to insert. Object format not supported in restricted creation mode.") #define INSERT_ERROR hbTrId("txt_messaging_dpopinfo_unable_to_attach_item_file") +#define INSERT_PROTECTED_ERROR hbTrId("txt_messaging_dpopinfo_unable_to_attach_protected") #define INSERT_QUERY_CONFRM hbTrId("The receiving phone may not support this object. Continue?") // ----------------------------------------------------------------------------- // MmsConformanceCheck::MmsConformanceCheck @@ -48,7 +50,7 @@ { QDEBUG_WRITE("MmsConformanceCheck::MmsConformanceCheck start"); - TRAP_IGNORE( + TRAP_IGNORE( CRepository* repository = CRepository::NewL(KCRUidMmsEngine); CleanupStack::PushL(repository); @@ -62,7 +64,7 @@ repository->Get( KMmsEngineMaximumSendSize, maxSize ); iMaxMmsSize = maxSize; - CleanupStack::PopAndDestroy(repository); + CleanupStack::PopAndDestroy(repository); ); QDEBUG_WRITE("MmsConformanceCheck::MmsConformanceCheck end"); @@ -85,33 +87,33 @@ bool showNote) { QDEBUG_WRITE("MmsConformanceCheck::CheckModeForInsert start"); - HBufC* filePath = S60QConversions::qStringToS60Desc(file); + HBufC* filePath = XQConversions::qStringToS60Desc(file); if (filePath) { CleanupStack::PushL(filePath); CMmsConformance* mmsConformance = CMmsConformance::NewL(); mmsConformance->CheckCharacterSet(EFalse); - + CleanupStack::PushL(mmsConformance); - - CMsgMediaResolver* mediaResolver = CMsgMediaResolver::NewL(); + + CMsgMediaResolver* mediaResolver = CMsgMediaResolver::NewL(); mediaResolver->SetCharacterSetRecognition(EFalse); - + CleanupStack::PushL(mediaResolver); - + RFile fileHandle = mediaResolver->FileHandleL(*filePath); CleanupClosePushL(fileHandle); CMsgMediaInfo* info = mediaResolver->CreateMediaInfoL(fileHandle); mediaResolver->ParseInfoDetailsL(info,fileHandle); - + TMmsConformance conformance = mmsConformance->MediaConformance(*info); - TUint32 confStatus = conformance.iConfStatus; + iConfStatus = conformance.iConfStatus; CleanupStack::PopAndDestroy(4); - + // In "free" mode user can insert images that are larger by dimensions than allowed by conformance if (iCreationMode != EMmsCreationModeRestricted) { @@ -121,22 +123,21 @@ | EMmsConfNokTooBig); // If user answers yes to Guided mode confirmation query he/she moves to free mode - if ( (confStatus & i) && ! (confStatus & j)) + if ( (iConfStatus & i) && ! (iConfStatus & j)) { if (iCreationMode == EMmsCreationModeFree || info->Protection() & EFileProtSuperDistributable) { // SuperDistribution not checked here // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode - confStatus &= ~EMmsConfNokFreeModeOnly; - confStatus &= ~EMmsConfNokScalingNeeded; + iConfStatus &= ~EMmsConfNokFreeModeOnly; + iConfStatus &= ~EMmsConfNokScalingNeeded; } - else if (showNote && launchEditorQuery()) + else if (showNote) { - // Query accepted. - // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode - confStatus &= ~EMmsConfNokFreeModeOnly; - confStatus &= ~EMmsConfNokScalingNeeded; + HbMessageBox::question(INSERT_QUERY_CONFRM, this, + SLOT(onDialogInsertMedia(HbAction*)), + HbMessageBox::Yes | HbMessageBox::No); } else { @@ -145,16 +146,24 @@ } } } - else if (confStatus & EMmsConfNokDRM || confStatus - & EMmsConfNokNotEnoughInfo || confStatus - & EMmsConfNokNotSupported || confStatus - & EMmsConfNokFreeModeOnly || confStatus & EMmsConfNokCorrupt) + else if (iConfStatus & EMmsConfNokDRM || iConfStatus + & EMmsConfNokNotEnoughInfo || iConfStatus + & EMmsConfNokNotSupported || iConfStatus + & EMmsConfNokFreeModeOnly || iConfStatus & EMmsConfNokCorrupt) { // Sanity check // "Not conformant" assumed if check fails. if(showNote) { - showPopup(INSERT_ERROR); + // For protected objects. + if (EFileProtNoProtection != info->Protection()) + { + showPopup(INSERT_PROTECTED_ERROR); + } + else + { + showPopup(INSERT_ERROR); + } } return EInsertNotSupported; @@ -174,18 +183,20 @@ UniDataModelLoader* pluginLoader = new UniDataModelLoader(); UniDataModelPluginInterface* pluginInterface = pluginLoader->getDataModelPlugin(ConvergedMessage::Mms); - pluginInterface->setMessageId(messageId); + int id = pluginInterface->setMessageId(messageId); - //Check if slide count is greater than 1 - if (pluginInterface->slideCount() > 1) + //Check if invalid id and slide count is greater than 1 + if ( ( id <= 0 ) || + (pluginInterface->slideCount() > 1) ) { delete pluginLoader; return false; } - //Check if message size is inside max mms composition limits + //Check if message size is inside max mms composition limits if (pluginInterface->messageSize() > iMaxMmsSize) { + delete pluginLoader; return false; } @@ -211,7 +222,6 @@ if (!retValue) { delete pluginLoader; - return false; } @@ -233,17 +243,23 @@ } delete pluginLoader; - return retValue; } -// --------------------------------------------------------- -// MmsConformanceCheck::launchEditorQuery -// --------------------------------------------------------- +// ----------------------------------------------------------------------------- +// MmsConformanceCheck::onDialogInsertMedia +// ----------------------------------------------------------------------------- // -bool MmsConformanceCheck::launchEditorQuery() +void MmsConformanceCheck::onDialogInsertMedia(HbAction* action) { - return HbMessageBox::question(INSERT_QUERY_CONFRM); + HbMessageBox *dlg = qobject_cast (sender()); + if (action == dlg->actions().at(0)) { + // Query accepted. + // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode + iConfStatus &= ~EMmsConfNokFreeModeOnly; + iConfStatus &= ~EMmsConfNokScalingNeeded; + } + } // -----------------------------------------------------------------------------